这是我的代码:
public int getMsgNum()
{
string sqlStr = "Select MAX(MsgID) FROM Msgs";
SqlDataAdapter daObj = new SqlDataAdapter(sqlStr, conStr);
DataSet dsObj = new DataSet();
daObj.Fill(dsObj);
DataTableReader r = dsObj.Tables[0].CreateDataReader();
return (int.Parse(r["MsgID"].ToString())+1);
}
我试图在表中获得MsgID的最大值。我检查过并且名称是正确的:有一个名为Msgs
的表,并且有一个名为MsgID
的列,这不是问题所在。 Al conStr
是正确的,因为我能够使用相同的conStr
插入表格。
这是例外:
System.InvalidOperationException: DataTableReader is invalid for current DataTable 'Table'.
at System.Data.DataTableReader.get_Item(String name)
at WebService.getMsgNum() in c:\Users\Omer\Desktop\project-Worker4\ServerSide\App_Code\WebService.cs:line 264
at WebService.sendMsg(String Sender, String Reciver, String Topic, String Contecnt) in c:\Users\Omer\Desktop\project-Worker4\ServerSide\App_Code\WebService.cs:line 95
它对我没有任何意义
答案 0 :(得分:1)
我认为问题在于:
DataTableReader r = dsObj.Tables[0].CreateDataReader();
return (int.Parse(r["MsgID"].ToString())+1);
为什么要构建DataTableReader
dsObj.Tables[0]
?你不能只看到dsObj.Tables[0].Rows[0][0]
或者你可以使用
SqlConnection connection = new SqlConnection("Connection_String");
SqlCommand command = new SqlCommand("Select MAX(MsgID) FROM Msgs", connection);
object maxValue = command.ExecuteScalar();
return (int.Parse(maxValue) + 1);
答案 1 :(得分:1)
sh_kamath在他的回答中是正确的。
对于您的代码,问题是您忘记添加read()
方法。
关注工作
public int getMsgNum()
{
string sqlStr = "Select MAX(MsgID) FROM Msgs";
SqlDataAdapter daObj = new SqlDataAdapter(sqlStr, conStr);
DataSet dsObj = new DataSet();
daObj.Fill(dsObj);
DataTableReader r = dsObj.Tables[0].CreateDataReader();
int int1 = 0;
while (r.Read())
{
int1 = int.Parse(r["MsgID"].ToString())+1;
}
return int1;
}