我一直在尝试在过去几小时内将数据插入到sql数据库中。由于一个或其他原因,我能够连接到数据库,但没有数据插入数据库。如果我直接在数据库中运行sql语句它似乎工作。因此,我能够得出结论,声明是正确的。此外,运行时没有错误。我有以下c#代码:
//Neither of these statements seem to work.
string sqlStatement = "INSERT INTO dbo.eventTable (colA, colB, colC, colD, colE, colF, colG, colH, colI) VALUES (@a,@b,@c,@d,@e,@f,@g,@h,@i)";
string altSqlStatement = "INSERT INTO dbo.eventTable (colA, colB, colC, colD, colE, colF, colG, colH, colI) VALUES (@a,@b,@c,@d,@e,@f,@g,@h,@i)";
foreach (DataRow row in importData.Rows)
{
using (SqlConnection conn = new SqlConnection(form1.Properties.Settings.Default.showConnectionString))
{
using (SqlCommand insertCommand = new SqlCommand())
{
insertCommand.Connection = conn;
insertCommand.CommandText = sqlStatement;
insertCommand.CommandType = CommandType.Text;
insertCommand.Parameters.AddWithValue("@a", row["CUE"].ToString());
insertCommand.Parameters.AddWithValue("@b", row["HH"].ToString());
insertCommand.Parameters.AddWithValue("@c", row["MM"].ToString());
insertCommand.Parameters.AddWithValue("@d", row["SS"].ToString());
insertCommand.Parameters.AddWithValue("@e", row["FF"].ToString());
insertCommand.Parameters.AddWithValue("@f", row["ADDR"].ToString());
insertCommand.Parameters.AddWithValue("@g", row["Event Description"].ToString());
insertCommand.Parameters.AddWithValue("@h", row["CAL"].ToString());
insertCommand.Parameters.AddWithValue("@i", row["PFT"].ToString());
try
{
conn.Open();
int _affected = insertCommand.ExecuteNonQuery();
}
catch(SqlException e)
{
// do something with the exception
}
}
}
}
如果我将连接参数更改为false,则会发生错误,因此看起来是正确的。
非常感谢任何帮助。
谢谢!
Alex
答案 0 :(得分:0)
尝试将此功能用作模板,区别在于它在创建命令之前打开连接。我没有看到它按照你设置的方式完成。你也应该在for循环之外打开连接,而不是在for循环中打开。为什么反复打开和关闭它; foreach应该在内部'使用'
内public void ExecuteQuery(string query, Dictionary<string, object> parameters)
{
using (SqlConnection conn = new SqlConnection(this.connectionString))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = query;
if (parameters != null)
{
foreach (string parameter in parameters.Keys)
{
cmd.Parameters.AddWithValue(parameter, parameters[parameter]);
}
}
cmd.ExecuteNonQuery();
}
}
}