如何修复 Windows 窗体应用程序中的“无法从'字符串'转换为 System.Data.SqlDbType”

How to fix 'Cannot convert from 'string' to System.Data.SqlDbType' in a Windows Forms Application

提问人:AddieCaddy 提问时间:7/7/2022 更新时间:7/7/2022 访问量:1230

问:

仅当我为正在构建的示例应用程序创建基本登录屏幕时,才会发生这种情况。我在应用程序中有各种其他函数,可以读取/写入/更新数据库中的行而不会出错。

private void btnLogin_Click(object sender, EventArgs e)
    {
        try
        {
            if(txtUname.Text == "" && txtPW.Text == "")
            {
                MessageBox.Show("Please fill in required fields!");
            }
            else
            {
                SqlCommand cmd = new SqlCommand("select * from LoginUsers where U_Name=@Name and U_Pass=@Pass", con);

                cmd.Parameters.Add("@Name", txtUname.Text); <- Error on textbox string
                cmd.Parameters.Add("@Pass", txtPW.Text);    <- Error on textbox string

                SqlDataAdapter adpt = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adpt.Fill(ds);

                int count = ds.Tables[0].Rows.Count;
                if(count == 1   )
                {
                    MessageBox.Show("Successfully Logged in!");
                }
                else
                {
                    MessageBox.Show("Incorrect username or password!");
                }
            }

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

    }
C# SQL WinForms System.data

评论

1赞 gunr2171 7/7/2022
您是否查找过第二个参数的数据类型?它不是要求字符串。
0赞 gunr2171 7/7/2022
@dLcreations请避免在评论中回答
0赞 Ryan Wilson 7/7/2022
sqlparametercollection.add - 查看文档以获取帮助。
0赞 dLcreations 7/7/2022
@gunr2171 - 注意到的 SIR

答:

0赞 dLcreations 7/7/2022 #1

尝试以下任何人:

方法1:

command.Parameters.Add("@ID", SqlDbType.Int).Value = customerID;

方法2:

command.Parameters.AddWithValue("@demographics", demoXml);

只是一个基于定义的分类的随机代码,如果您在使用上述任何一种方法后仍然遇到问题,请告诉我。

评论

2赞 gunr2171 7/7/2022
请不要建议使用 .blogs.msmvps.com/jcoehoorn/blog/2014/05/12/......AddWithValue
0赞 AddieCaddy 7/7/2022
AddWithValue出了什么问题,这才是真正解决我的问题。
0赞 dLcreations 7/7/2022
@AddieCaddy - 这是为了避免类型不匹配问题。大多数时候,如果您确定自己传递的内容,这些类型的不匹配并不重要。正确的 gunr2171 ?
0赞 Charlieface 7/7/2022
@AddieCaddy 第一个选项是您一直想要的选项,至少在字符串、日期和小数方面是这样