【问题标题】:Insert values from several textboxes into one column but creating a new row for each textbox value将多个文本框中的值插入一列,但为每个文本框值创建一个新行
【发布时间】: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 而不是Textcmmd.Parameters.Add("@ColumnName", SqlDbType.NVarChar, -1);
  • 我改了。但是,当它将数据输入数据库时​​,它会将 textbox1 中的值保存到一行中,但 textbox 2 中的值会在每行中保存两次。
  • 我的 cmets 是关于参数错误,而不是其他编码问题。将当前无效的代码添加到您的问题中。

标签: c# sql-server winforms


【解决方案1】:

你需要换行

cmmd.Parameters["@ColumnName"].Value = TextBox1.Text + ' ' + TextBox2.Text;

以下内容:

cmmd.Parameters["@ColumnName"].Value = TextBox1.Text;
cmmd.ExecuteNonQuery();
cmmd.Parameters["@ColumnName"].Value =  TextBox2.Text;
cmmd.ExecuteNonQuery();

【讨论】:

  • 您好,它通过将每个文本框值输入到同一列但每个值的不同行来工作。我遇到的唯一问题是它输入每个值两次,所以它每次创建 4 行,而它应该只有 2 行。我该如何解决?
  • 谢谢你们,你们提供的对我的代码的编辑就像一个魅力,我遇到的问题是由于我在代码末尾有一个 try/catch,还有另一个 ExecuteNonQuery声明,所以它两次输入最后一个值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多