我需要在这里进行健全性检查....我有一个非常简单的ExecuteNonQuery。我正在将值传递给sproc,但它仍然返回一个错误,即第一个值甚至没有通过。
using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
{
sqlConnection.Open();
using (SqlCommand sqlCommandLogError = new SqlCommand("MyStoredProc", sqlConnection))
{
sqlCommandLogError.Parameters.AddWithValue("logEntry", logEntry);
sqlCommandLogError.Parameters.AddWithValue("EventLogEntryType", EventLogEntryType);
sqlCommandLogError.Parameters.AddWithValue("EventID", eventId);
sqlCommandLogError.ExecuteNonQuery();
}
}
我验证了该过程中存在的参数 我在程序中将它们弄清楚,以确保实际上sproc中的字段是正确的并且它有效(它将所有空值放在数据库中)
任何想法为什么程序认为没有参数通过?
更新问题尽管回答这个问题但我很乐意听取一些专家的意见:@symbol是否需要参数(似乎没有),为什么它甚至会找到我的sproc没有输入命令类型。
答案 0 :(得分:1)
请试试这个。同时将@
添加到密钥名称。
using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
{
sqlConnection.Open();
using (SqlCommand sqlCommandLogError = new SqlCommand("MyStoredProc",
sqlConnection))
{
sqlCommandLogError.CommandType = CommandType.StoredProcedure;
sqlCommandLogError.Parameters.AddWithValue("@logEntry", logEntry);
sqlCommandLogError.Parameters.AddWithValue("@EventLogEntryType",
EventLogEntryType);
sqlCommandLogError.Parameters.AddWithValue("@EventID", eventId);
sqlCommandLogError.ExecuteNonQuery();
}
}
答案 1 :(得分:0)
很难得出准确的答案,因为SQL Server存储过程的源代码" MyStoredProc"没有附上。根据可用信息,您的存储过程参数名称应以" @"开头。字符。
答案 2 :(得分:0)
您应该使用@和SqlType传递参数名称,如下所示:
using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
{
sqlConnection.Open();
using (SqlCommand sqlCommandLogError = new SqlCommand("MyStoredProc", sqlConnection))
{
sqlCommandLogError.Parameters.Add(new SqlParameter("@logEntry", SqlDbType.YourParamType) {Value = logEntry});
sqlCommandLogError.Parameters.Add(new SqlParameter("@EventLogEntryType", SqlDbType.YourParamType) {Value = EventLogEntryType});
sqlCommandLogError.Parameters.Add(new SqlParameter("@EventID", SqlDbType.YourParamType) {Value = eventId});
sqlCommandLogError.ExecuteNonQuery();
}
}