Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SqlDataReader时“数据为空”_C#_Sql Server_Sqldatareader - Fatal编程技术网

C# 使用SqlDataReader时“数据为空”

C# 使用SqlDataReader时“数据为空”,c#,sql-server,sqldatareader,C#,Sql Server,Sqldatareader,我对代码中的最后一个字符串有问题 这是我的代码: 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=*****";

我对代码中的最后一个字符串有问题

这是我的代码:

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();
            }
}
此问题显示,因为我在表中添加了另一列,并在该列中创建了字符串 串

我得到的错误是

数据为null无法对null值调用此方法或属性


其他字符串工作正常。

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


我将我的行替换为您的行,但我无法将类型为“system.Int32”的对象强制转换为类型为“system string”的对象。很抱歉,我没有正确地执行此操作。让我再次检查,并将返回给您谢谢它正在工作非常感谢,请你解释一下为什么我必须添加int,因为这个列是varchar,我对这个世界真的很陌生,你可以看到这个索引中的数据是否为null。如果是,则返回null。否则,获取字符串。
sstatus = Reader.GetString(Reader.GetOrdinal("status"));
int statusIndex = Reader.GetOrdinal("status");
string sstatus = Reader.IsDBNull(statusIndex) ? null : Reader.GetString(statusIndex);