C# Windows窗体SQLC命令#错误
我有一个在家编写的Windows窗体程序(我主要使用ASP.Net,所以已经有一段时间了),执行存储过程命令时遇到问题 我从C# Windows窗体SQLC命令#错误,c#,sql,sql-server,stored-procedures,C#,Sql,Sql Server,Stored Procedures,我有一个在家编写的Windows窗体程序(我主要使用ASP.Net,所以已经有一段时间了),执行存储过程命令时遇到问题 我从SqlConnection对象创建SqlCommand对象,然后从SqlCommand创建SqlParameter。我指定名称、数据类型等。但是,每当我调用SqlCommand ExecuteReader()时,它都会告诉我它需要未提供的参数。我清楚地添加了它们,并且可以在调试中单步执行时看到它们被填充。有什么想法吗 存储过程: EXEC dbo.GetTransactio
SqlConnection
对象创建SqlCommand
对象,然后从SqlCommand
创建SqlParameter
。我指定名称、数据类型等。但是,每当我调用SqlCommand ExecuteReader()
时,它都会告诉我它需要未提供的参数。我清楚地添加了它们,并且可以在调试中单步执行时看到它们被填充。有什么想法吗
存储过程:
EXEC dbo.GetTransactions @StartDate = '2015-04-10 18:07:43',
@EndDate = '2015-04-10 18:07:43'
类数据访问
:
public static DataTable Execute(SqlCommand iCommand) {
DataTable objTable = new DataTable();
try {
iCommand.Connection.Open();
SqlDataReader objReader = iCommand.ExecuteReader();
objTable.Load(objReader);
objReader.Close();
}
catch {
throw;
}
finally {
iCommand.Connection.Close();
}
return objTable;
}
public static SqlCommand CreateCommand(string iProcedureName) {
try {
SqlConnection objConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectionString"].ToString());
SqlCommand objCommand = new SqlCommand(iProcedureName, objConnection);
return objCommand;
}
catch {
throw;
}
}
类事务集合
:
private static DataTable Load(DateTime iStartDate, DateTime iEndDate) {
string strProcedureName = "GetTransactions";
SqlCommand objCommand = DataAccess.CreateCommand(strProcedureName);
SqlParameter param = objCommand.CreateParameter();
param.ParameterName = "@StartDate";
param.DbType = DbType.DateTime;
param.Value = iStartDate;
objCommand.Parameters.Add(param);
param = objCommand.CreateParameter();
param.ParameterName = "@EndDate";
param.DbType = DbType.DateTime;
param.Value = iEndDate;
objCommand.Parameters.Add(param);
return DataAccess.Execute(objCommand);
}
您需要告诉您的
SqlCommand
它正在执行一个存储过程!您需要设置SqlCommand
的CommandType
-请参见此处:
public static SqlCommand CreateCommand(string iProcedureName) {
try {
SqlConnection objConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectionString"].ToString());
SqlCommand objCommand = new SqlCommand(iProcedureName, objConnection);
// add this line here!!
objCommand.CommandType = CommandType.StoredProcedure;
return objCommand;
}
catch {
throw;
}
}
更改第二个参数创建,创建一个新参数,而不是重新指定现有参数。e、 g.
SqlParameter param1=objCommand.CreateParameter();param.ParameterName=“@EndDate”
如果您只是想捕获异常并在不记录日志的情况下重新刷新,那么最好使用using
语句。此外,您还可以简化一些SqlDataReader objReader=iCommand.ExecuteReader();objTable.Load(objReader)代码>可以变成objTable.Load(iCommand.ExecuteReader())代码>谢谢marc_!我完全忘记了那一步。添加该行后,现在可以正常工作。