Windows 窗体 SqlCommand C# 错误
Windows Form SqlCommand C# Error
我有一个在家编写的 Windows 表单程序(我主要使用 ASP.Net 所以已经有一段时间了),但我在执行存储过程命令时遇到了问题。
我从 SqlConnection
对象创建 SqlCommand
对象,然后从 SqlCommand
创建 SqlParameter
对象。我指定名称、数据类型等。但是,每当我调用 SqlCommand ExecuteReader()
时,它都会告诉我它需要未提供的参数。我清楚地添加了它们,并且在调试中单步执行时可以看到它们已填充。有什么想法吗?
存储过程:
EXEC dbo.GetTransactions @StartDate = '2015-04-10 18:07:43',
@EndDate = '2015-04-10 18:07:43'
Class 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;
}
}
Class 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
它正在执行存储过程!您需要设置 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;
}
}
我有一个在家编写的 Windows 表单程序(我主要使用 ASP.Net 所以已经有一段时间了),但我在执行存储过程命令时遇到了问题。
我从 SqlConnection
对象创建 SqlCommand
对象,然后从 SqlCommand
创建 SqlParameter
对象。我指定名称、数据类型等。但是,每当我调用 SqlCommand ExecuteReader()
时,它都会告诉我它需要未提供的参数。我清楚地添加了它们,并且在调试中单步执行时可以看到它们已填充。有什么想法吗?
存储过程:
EXEC dbo.GetTransactions @StartDate = '2015-04-10 18:07:43',
@EndDate = '2015-04-10 18:07:43'
Class 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;
}
}
Class 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
它正在执行存储过程!您需要设置 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;
}
}