【发布时间】:2020-04-19 19:38:47
【问题描述】:
我有一个将数据插入 SQL Server 数据库的 C# 程序。数据库有一列,当然可以使用数据插入创建多行。在我的 Winforms 程序中,我有几个从另一个表中获取数据的文本框,每个文本框获取不同的数据。我想将每个文本框中的数据插入同一列。但是,我需要每个文本框值进入自己的行。像这样
ColumnName
-------------------
Value from textbox1
Value from textbox2
这是我的代码。问题是它像我想要的那样在同一列中插入来自 2 个文本框的值,但在同一行中。
这是代码:
string str = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
SqlConnection con = new SqlConnection(str);
con.Open();
_ = TextBox1Text;
_ = TextBox1Text ;
String commandText = "INSERT INTO SQLTableName (ColumnName) VALUES (@ColumnName)";
if (con.State == ConnectionState.Open)
{
SqlCommand cmmd = new SqlCommand(commandText, con);
cmmd.Parameters.Add("@ColumnName", SqlDbType.Text);
cmmd.Parameters["@ColumnName"].Value = TextBox1.Text + ' ' + TextBox2.Text;
}
谁能帮我弄清楚如何完成这项工作?
编辑:
我按照 cmets and answer 中的建议修改了代码。但是,当它将数据输入数据库时,它会将 textbox1 中的值保存到一行中,但 textbox 2 中的值会在每行中保存两次。
String commandText = "INSERT INTO MyTable (ColumnName)Values(@ColumnName)";
if (con.State == ConnectionState.Open)
{
SqlCommand cmmd = new SqlCommand(commandText, con)
cmmd.Parameters.Add("@ColumnName", SqlDbType.Nvarchar, -1);
cmmd.Parameters["@ColumnName"].Value = TextBox1.Text;
cmmd.ExecuteNonQuery();
cmmd.Parameters["@ColumnName"].Value = TextBox2.Text;
cmmd.ExecuteNonQuery();
}
【问题讨论】:
-
假设实际的列数据类型是
varchar(n)而不是已弃用的text数据类型,请指定该类型和列最大长度,如cmmd.Parameters.Add("@ColumnName", SqlDbType.VarChar, 100); -
您好,数据库中该列的数据类型是 nvarchar(Max)
-
然后指定
NVarchar而不是Text:cmmd.Parameters.Add("@ColumnName", SqlDbType.NVarChar, -1);。 -
我改了。但是,当它将数据输入数据库时,它会将 textbox1 中的值保存到一行中,但 textbox 2 中的值会在每行中保存两次。
-
我的 cmets 是关于参数错误,而不是其他编码问题。将当前无效的代码添加到您的问题中。
标签: c# sql-server winforms