问题描述
我在c#控制台应用程序中有一个方法,该方法传递存储过程名称的字符串并返回数据表。
public DataTable Table(int val,string ProcedureName)
{
string Pk = "@" + ProcedureName + "Id";
var command = GetCommand(ProcedureName);
command.Parameters[Pk].Value = val;
DataTable table = new DataTable();
sqlDataAdapter adapter = new sqlDataAdapter(command);
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
adapter.Fill(table);
return table;
}
internal sqlCommand GetCommand(string ProcedureName)
{
sqlCommand cmd = new sqlCommand()
{
Connection = BuildingSecurityContext(),CommandType = CommandType.StoredProcedure,CommandText = ProcedureName
};
_BuildingSecurityContext.open();
sqlCommandBuilder.DeriveParameters(cmd);
_BuildingSecurityContext.Close();
return cmd;
}
这是将结果打印到控制台的方法。
static void ReadResults(DataTable table)
{
for (int i = 0; i < table.Rows.Count; i++)
{
Console.WriteLine($"{table.Rows[i].Field<int>(0)}{table.Rows[i].Field<string>(1)}{table.Rows[i].Field<string>(2)}");
}
}
问题是我遇到一个错误,找不到第1列。(在我看来,该命令未填充数据表)。
有人可以指出我要去哪里了吗?
解决方法
参数以@开头,但是大多数过程都不是-您确定要在@之前加上符号吗?
这行也没有意义
command.Parameters[Pk].Value = val;