C# 使用INSERT INTO添加到Access DB?
我有一个Access DB,它的表(DV1)有[ID TIME CODE REASON]列。我只是想更新表格。我一直在插入sytax错误。我看到的一切都很好。我什么都试过了。 我正在打开数据库,然后我得到了错误。有什么想法吗C# 使用INSERT INTO添加到Access DB?,c#,sql,ms-access,C#,Sql,Ms Access,我有一个Access DB,它的表(DV1)有[ID TIME CODE REASON]列。我只是想更新表格。我一直在插入sytax错误。我看到的一切都很好。我什么都试过了。 我正在打开数据库,然后我得到了错误。有什么想法吗 private void WRTODB_Click(object sender, EventArgs e) { OleDbConnection machStopDB = new OleDbConnection("Provider=Microsoft.
private void WRTODB_Click(object sender, EventArgs e)
{
OleDbConnection machStopDB = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+@"C:\Users\sgarner\Google Drive\Visual Studio 2012\Timer test\WRITE TO DB\WRITE TO DB\Machine_Stop.accdb");
machStopDB.Open();
string str = "INSERT INTO DV1(TIME,CODE,REASON)" +
"VALUES( ('" + DateTime.Now + "'),('" + textBox1.Text + "'),('" + textBox2.Text + "'))";
OleDbCommand insertCmd = new OleDbCommand(str, machStopDB);
insertCmd.ExecuteNonQuery();
machStopDB.Close();
}
这只是我正在使用的一个测试程序。以下代码包含了上述评论提供的合理想法:
private void WRTODB_Click(object sender, EventArgs e)
{
try
{
using (SqlConnection dbConnection = new SqlConnection())
{
string Source = @"C:\Users\sgarner\Google Drive\Visual Studio 2012\Timer test\WRITE TO DB\WRITE TO DB\Machine_Stop.accdb";
dbConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Source;
dbConnection.Open();
using (SqlCommand command = new SqlCommand("INSERT INTO DV1([TIME],CODE,REASON) VALUES ([pTime],[pCode],[pReason])", dbConnection))
{
command.Parameters.AddWithValue("pTime", DateTime.Now);
command.Parameters.AddWithValue("pCode", textBox1.Text);
command.Parameters.AddWithValue("pReason", textBox2.Text);
command.ExecuteNonQuery();
}
dbConnection.Close();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
尝试使用参数使您的代码更简单readable@Yahya也许更重要的是,不易受SQL注入攻击I可能是错误的,但为什么在每个值周围都有括号呢?我认为单引号就足够了。@Yahya更不用说更安全了。
“值(Now(),”+
Access现在将为您提供。时间是一个,您需要逃避它。为什么要在MS Access现在()时插入ptime?谢谢@Remou-我忽略了时间-将编辑帖子。我不清楚您所说的MS Access现在()是什么意思。)?您的意思是字段定义应该包含一个指定Now()的默认值吗?-我同意。+1是的,但不仅仅是这样,这确实很好,您只需在sql字符串值(Now(),[pCode]中使用Now即可,
这节省了不少痛苦。关于参数和SqlCommand/OleDbCommand:您可能想看看这里;深入介绍了手动创建参数:;可能会节省很多痛苦,尤其是datetime和float/double。谢谢@RJ Moeller-非常有趣!