OleDbConnection - 并非所有信息都被传递
OleDbConnection - Not all information being passed
我正在尝试将一些信息传递到 Access 数据库,但是我不确定我是否正确使用了 ExecuteNonQuery()
。这是我正在使用的代码:
public void WriteToDB(string connStr, string tblName)
{
string[] accounts = { "@ID", "@Date", "@Line Item", "@Ranking Item", "@Item Attribute", "@Current_Period_Ranking(b)" };
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
OleDbCommand CmdSQL = new OleDbCommand(string.Format("Insert into [{0}] ([ID], [Date], [Line Item], [Ranking Item], [Ranking]) VALUES(?,?,?,?,?)",tblName),conn);
CmdSQL.Parameters.AddWithValue("@ID", 1);
CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016");
CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName);
CmdSQL.Parameters.AddWithValue("@Ranking Item", "Ranking");
CmdSQL.Parameters.AddWithValue("@Ranking", this.Rank.GetLineItem(3));
CmdSQL.ExecuteNonQuery();
CmdSQL.Parameters.AddWithValue("@ID", 2);
CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016");
CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName);
CmdSQL.Parameters.AddWithValue("@Ranking Item", "Price");
CmdSQL.Parameters.AddWithValue("@Ranking", this.Price);
CmdSQL.ExecuteNonQuery();
CmdSQL.Parameters.AddWithValue("@ID", 3);
CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016");
CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName);
CmdSQL.Parameters.AddWithValue("@Ranking Item", "Pounds");
CmdSQL.Parameters.AddWithValue("@Ranking", this.Pounds);
CmdSQL.ExecuteNonQuery();
CmdSQL.Parameters.AddWithValue("@ID", 4);
CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016");
CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName);
CmdSQL.Parameters.AddWithValue("@Ranking Item", "Opportunity");
CmdSQL.Parameters.AddWithValue("@Ranking", this.Opportunity);
CmdSQL.ExecuteNonQuery();
}
当我运行这段代码时,Access DB只显示1。
因为你用的是同一个命令,所以后面的参数要清空:
CmdSQL.ExecuteNonQuery();
CmdSQL.Parameters.Clear();
CmdSQL.Parameters.AddWithValue("@ID", 4);
....
附带说明一下,日期应该是数据库中的日期,而不是字符串。如果您有一堆具有相同结构的 table,您的数据库看起来有问题。为什么不只是一个 table 和一个区分它是什么类型的行的字段。这将使您的查询更容易。将那些一次性数据库对象放在 using 块中也是非常常见和有益的。
我正在尝试将一些信息传递到 Access 数据库,但是我不确定我是否正确使用了 ExecuteNonQuery()
。这是我正在使用的代码:
public void WriteToDB(string connStr, string tblName)
{
string[] accounts = { "@ID", "@Date", "@Line Item", "@Ranking Item", "@Item Attribute", "@Current_Period_Ranking(b)" };
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
OleDbCommand CmdSQL = new OleDbCommand(string.Format("Insert into [{0}] ([ID], [Date], [Line Item], [Ranking Item], [Ranking]) VALUES(?,?,?,?,?)",tblName),conn);
CmdSQL.Parameters.AddWithValue("@ID", 1);
CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016");
CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName);
CmdSQL.Parameters.AddWithValue("@Ranking Item", "Ranking");
CmdSQL.Parameters.AddWithValue("@Ranking", this.Rank.GetLineItem(3));
CmdSQL.ExecuteNonQuery();
CmdSQL.Parameters.AddWithValue("@ID", 2);
CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016");
CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName);
CmdSQL.Parameters.AddWithValue("@Ranking Item", "Price");
CmdSQL.Parameters.AddWithValue("@Ranking", this.Price);
CmdSQL.ExecuteNonQuery();
CmdSQL.Parameters.AddWithValue("@ID", 3);
CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016");
CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName);
CmdSQL.Parameters.AddWithValue("@Ranking Item", "Pounds");
CmdSQL.Parameters.AddWithValue("@Ranking", this.Pounds);
CmdSQL.ExecuteNonQuery();
CmdSQL.Parameters.AddWithValue("@ID", 4);
CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016");
CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName);
CmdSQL.Parameters.AddWithValue("@Ranking Item", "Opportunity");
CmdSQL.Parameters.AddWithValue("@Ranking", this.Opportunity);
CmdSQL.ExecuteNonQuery();
}
当我运行这段代码时,Access DB只显示1。
因为你用的是同一个命令,所以后面的参数要清空:
CmdSQL.ExecuteNonQuery();
CmdSQL.Parameters.Clear();
CmdSQL.Parameters.AddWithValue("@ID", 4);
....
附带说明一下,日期应该是数据库中的日期,而不是字符串。如果您有一堆具有相同结构的 table,您的数据库看起来有问题。为什么不只是一个 table 和一个区分它是什么类型的行的字段。这将使您的查询更容易。将那些一次性数据库对象放在 using 块中也是非常常见和有益的。