从SQL数据库表中获取值

时间:2014-03-04 12:33:07

标签: sql sql-server

这是我的代码:

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

它对我没有任何意义

2 个答案:

答案 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;
}