我正在尝试编写一个运行SQL命令的通用函数,只返回一个结果。
我收到以下错误:
Exception Details: System.InvalidOperationException: ExecuteScalar: Connection property has not been initialized.
Source Error:
Line 130:
Line 131: SQLCommand.CommandText = SQL;
Line 132: String myResult = (String)SQLCommand.ExecuteScalar();
Line 133:
Line 134: return myResult;
Source File: c:\Development\pros\Functions.cs Line: 132
代码是:
public static string SingleSQL(string SQL)
{
SqlConnection SQLCON = new SqlConnection(ConfigurationManager.ConnectionStrings["PIDDBConnectionString"].ToString());
SQLCON.Open();
SqlCommand SQLCommand = new SqlCommand();
SQLCommand.CommandType = CommandType.Text;
SQLCommand.CommandText = SQL;
String myResult = (String)SQLCommand.ExecuteScalar();
return myResult;
}
答案 0 :(得分:3)
您不会将连接分配给SqlCommand
对象。
尝试类似
的内容public static string SingleSQL(string SQL)
{
SqlConnection SQLCON = new SqlConnection(ConfigurationManager.ConnectionStrings["PIDDBConnectionString"].ToString());
SqlCommand SQLCommand = new SqlCommand();
SQLCommand.Connection = SQLCON;
SQLCommand.CommandType = CommandType.Text;
SQLCommand.CommandText = SQL;
try
{
SQLCON.Open();
return (String)SQLCommand.ExecuteScalar();
} finally {
if (SQLCON.State != ConnectionState.Closed) SQLCON.Close();
}
}
您应该能够将函数返回类型更改为object
。然后,调用函数可以根据需要进行转换。
答案 1 :(得分:0)
你最好使用
SQLCON.CreateCommand()
这将始终确保您拥有与所需连接相关联的命令。
为什么这样更好?假设您使用另一个数据库平台,那么您不必更改命令的代码(因为返回的命令是IDbCommand类型,这是SqlCommand背后的接口等)。