如何在 C# 中的新行的单列(单元格)中插入数据?

How to insert data in single column(cell) of new row in c#?

我有一个包含四个 table 的 .accdb 文件

Product_Particulars
Cust_Details
Variable_fields
Permanant_fields

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

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

N.B.: 我实际上正在使用 OleDb & 我将使用 'Tranx_ID' 来使用 OleDbCommand 更新特定行,例如

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

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

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

所以你的代码可能如下

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