我有一个在家编写的Windows Forms程序(我大部分时间都在使用ASP.Net,所以已经有一段时间了),我在执行存储过程命令时遇到了麻烦。
我创建了SqlCommand
从目标SqlConnection
对象,然后创建SqlParameter
从SqlCommand
。我指定名称,数据类型等。但是,每当我打电话SqlCommand ExecuteReader()
告诉我时,都会期望未提供的参数。我清楚地添加了它们,并在调试中逐步完成时可以看到它们的填充。有任何想法吗?
存储过程:
EXEC dbo.GetTransactions @StartDate = '2015-04-10 18:07:43',
@EndDate = '2015-04-10 18:07:43'
类DataAccess
:
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;
}
}
类TransactionCollection
:
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
它正在执行存储过程!你需要设置CommandType
你的SqlCommand
-在这里看到:
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;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句