C# [InvalidCastException:无法将类型为'System.DBNull'的对象强制转换为类型为'System.String'

C# [InvalidCastException:无法将类型为'System.DBNull'的对象强制转换为类型为'System.String',c#,asp.net,string,session,ms-access,C#,Asp.net,String,Session,Ms Access,错误行: 源错误: Line 37: while (rdr.Read()==true) Line 38: { Line 39: if (TextBoxUserName.Text == (string)rdr["CUserName"]) Line 40: { Line 41: ClientScript.RegisterStartupScript(csType,"Error",scrip

错误行:

源错误:

Line 37:         while (rdr.Read()==true)
Line 38:         {
Line 39:             if (TextBoxUserName.Text == (string)rdr["CUserName"]) 
Line 40:             {
Line 41:                 ClientScript.RegisterStartupScript(csType,"Error",scriptErrorUserId);
当我试图注册帐户时,它会弹出

我使用microsoft access作为数据库

数据库-CUserName 会话-苏瑟南 还有@eUserName

有什么想法吗?

在将rdr[CUserName]转换为字符串之前,需要先检查rdr[CUserName]是否等于System.DBNull.Value。更改此项:

if (TextBoxUserName.Text == (string)rdr["CUserName"])
为此:

string userName = rdr["CUserName"] != System.DBNull.Value ? (string)rdr["CUserName"] : string.Empty;
if (TextBoxUserName.Text == userName)
在将rdr[CUserName]转换为字符串之前,需要先检查它是否等于System.DBNull.Value。更改此项:

if (TextBoxUserName.Text == (string)rdr["CUserName"])
为此:

string userName = rdr["CUserName"] != System.DBNull.Value ? (string)rdr["CUserName"] : string.Empty;
if (TextBoxUserName.Text == userName)
替换这个

if (TextBoxUserName.Text == (string)rdr["CUserName"])

替换这个

if (TextBoxUserName.Text == (string)rdr["CUserName"])


你的回答有道理,但另一个人的回答解决了。我没有试过你的,因为我觉得没必要system.dbnull.value uh?对于字符串数据类型,您可能不需要检查!=System.DBNull.Value,但对于其他数据类型,即十进制或整数,您将需要它。啊,对了,非常感谢您提供的信息:您的答案有道理,但其他人的答案解决了它。我没有试过你的,因为我觉得没必要system.dbnull.value uh?对于字符串数据类型,您可能不需要检查!=System.DBNull.Value,但对于其他数据类型,即十进制或整数,您将需要它。啊,对了,非常感谢您提供的信息: