如何在 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
我有一个包含四个 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