使用SqlDataReader时出现"data is null"的错误提示

4

我的代码中最后一个字符串出现了问题。

这是我的代码:

private void comboLname_SelectedIndexChanged(object sender, EventArgs e)
{
            string conn = "Data Source=srv-db-02;Initial Catalog=rmsmasterdbtest;Persist Security Info=True;User ID=test;Password=*****";
            string Query = "select * from RMSCRMTest.dbo.sales where LastName= '" + comboLname.Text + "' ;";


            SqlConnection Myconn = new SqlConnection(conn);
            SqlCommand cmdDataBase = new SqlCommand(Query, Myconn);
            SqlDataReader Reader;
            try
            {
                Myconn.Open();
                Reader = cmdDataBase.ExecuteReader();
                while (Reader.Read())
                {
                    string ID = Reader.GetInt32(Reader.GetOrdinal("ID")).ToString();
                    string AccountNuber = Reader.GetString(Reader.GetOrdinal("AccountNumber")).ToString();
                    string Time = Reader.GetDateTime(Reader.GetOrdinal("Time")).ToString();
                    string Deposit = Reader.GetDecimal(Reader.GetOrdinal("Deposit")).ToString();
                    string slastname = Reader.GetString(Reader.GetOrdinal("lastname"));
                    string sstatus = Reader.GetString(Reader.GetOrdinal("status"));
                    txtid.Text = ID;
                    txtacnum.Text = AccountNuber;
                    txttime.Text = Time;
                    txtdeposit.Text = Deposit;
                    txtlname.Text = slastname;
                    txtstatus.Text = status;

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Myconn.Close();
            }
}

我在表格中添加了另一列,并将字符串添加到该列后,出现了这个问题。

sstatus = Reader.GetString(Reader.GetOrdinal("status"));

我收到的错误信息是:

数据为 null,无法在 null 值上调用此方法或属性。

其它字符串都可以正常工作。
1个回答

13

您需要使用 SqlDataReader.IsDBNull 方法检查可为空的字段:

int statusIndex = Reader.GetOrdinal("status");
string sstatus = Reader.IsDBNull(statusIndex) ? null : Reader.GetString(statusIndex);

我用你的代码替换了我的代码,结果出现了“无法将类型为'system.Int32'的对象强制转换为类型system string”的错误。 - Motimash
抱歉,我没有做对,请让我再检查一下,然后会回复您的,谢谢。 - Motimash
它正在工作,非常感谢。请问您能否解释一下为什么我必须添加int,因为这一列是varchar类型的,而我对这个世界还很陌生。 - Motimash
你正在检查该索引处的数据是否为空。如果是,则返回 null。否则,获取字符串。 - Engineer2021

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接