【问题标题】:How to insert data in single column(cell) of new row in c#?如何在c#中新行的单列(单元格)中插入数据?
【发布时间】:2016-07-28 17:47:16
【问题描述】:

我有一个 .accdb 文件,其中包含四个表

Product_Particulars
Cust_Details
Variable_fields
Permanant_fields

“Variable_fields”表中的列数不固定(使用“ALTER TABLE”OleDb nonQuery 更改)。但它有两个固定列“Tranx_ID”、“Tranx_time”。

我想完成一些事情,使我能够在文本框的新行中的“Tranx_ID”列中添加数据,而无需关心表中的其他列(即该行中的其他单元格,其中 'textBox. Text' 被尝试插入)并仅将包含数据的行保存在一个单元格中。

注意:我实际上正在使用 OleDb,我将使用“Tranx_ID”来使用 OleDbCommand 更新该特定行,例如,

"UPDATE Variable_fields " +
"SET [This column]='" +thistxtBx.Text +
     "',[That column]='" +thattxtBx.Text +
 "'WHERE ([Tranx_ID]='" +textBox.Text+ "')";

【问题讨论】:

  • 虽然我已经用谷歌搜索来解决我的问题,但可能我问了一些“愚蠢”的问题,所以请不要犹豫,否决我的问题,但请帮助我摆脱这个问题问题。欢迎任何形式的帮助、代码 sn-p、链接。 :(
  • 在您提出的解决方案中什么不起作用?你试过了吗?
  • 嗨史蒂夫,问题是,每当我尝试使用 oledb 命令在 Tranx_ID 中插入 textBox.Text 时,例如“INSERT INTO Variable_fields VALUES ("+textBox.Text+")";
  • 嗨史蒂夫,问题是,每当我尝试使用 oledb 命令在 Tranx_ID 中插入 textBox.Text 时,例如 "INSERT INTO Variable_fields VALUES ("+textBox.Text+")";出现一个异常,说“没有为一个或多个必需参数提供值”。我知道我没有提供有关如何处理其他单元格的任何数据,但我还没有找到任何其他方法。
  • 如果任何“忘记”列被定义为不允许空值,则会出现此异常。在这种情况下,您不走运。您需要为该列提供一个值或更改该列的定义以允许空值。

标签: c# database oledb oledbcommand oledbdataadapter


【解决方案1】:

该异常是由于您未插入的一个或多个列不能将 NULL 作为值而引起的。如果您可以删除此标志并允许空值,那么您的 INSERT 可能会因其他原因而工作或不工作。

确实,您使用字符串连接来构建查询,这是众所周知的错误来源或称为 Sql Injection 的黑客技术的载体(我真的建议您记录自己关于这个讨厌的问题)

所以你的代码可能如下

string query = @"UPDATE Variable_fields 
                 SET [This column]= @this,
                     [That column]=@that
                 WHERE ([Tranx_ID]=@trans";
using(OleDbConnection con = new OleDbConnection(....constringhere....))
using(OleDbCommand cmd = new OleDbCommand(query, con))
{
   con.Open();
   cmd.Parameters.Add("@this", OleDbType.VarWChar).Value = thisTextBox.Text;
   cmd.Parameters.Add("@that", OleDbType.VarWChar).Value = thatTextBox.Text;
   cmd.Parameters.Add("@trans", OleDbType.VarWChar).Value = transTextBox.Text;
   int rowsInserted = cmd.ExecuteNonQuery();
   if(rowsInserted > 0)
       MessageBox.Show("Record added");
   else
       MessageBox.Show("Record NOT added");
}

有用的链接:

Sql Injection explained
Give me parameterized query or give me death
Using statement

【讨论】:

  • 非常抱歉!史蒂夫,但可能我的问题不够清楚,我说我将使用 tranx_ID 更新我的数据库,但在我这样做之前,我需要在新行中插入 Tranx_ID 值并保存它。 :) & 我没有做到这一点(在单个列中插入值,即 Tranx_ID 列,在新行中)。但是,我必须感谢您提到的下一步可能出现的问题,并提供了解决方案。 :)
  • 要插入,只需将查询字符串更改为 INSERT INTO variable_fieds (trans_is, this_column, that_column) VALUES (@trans, @this, @that) 所有代码和上面一样
  • 再一次感谢您的帐户 Steve ;) (y)
猜你喜欢
  • 1970-01-01
  • 2015-03-18
  • 2023-03-22
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 2017-01-28
  • 2018-05-16
  • 2015-10-30
相关资源
最近更新 更多