微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

调用子例程ExecuteReader时获得异常

如何解决调用子例程ExecuteReader时获得异常

| 我有包含帐户信息的sql Server Compact 3.5数据库。但是每次调用函数Exec​​uteReader时,都会在下面得到此异常:   列名无效。 [节点   名称(如果有)=,列名称= ID] 但这是正确的列名。列名如下:用户名,密码,创建日期等。 这是下面的代码
            sqlCeConnection connection = new sqlCeConnection(@\"Data Source=C:\\Users\\Danny\\Documents\\Visual Studio 2010\\Projects\\Databinding Login Form\\Databinding Login Form\\MyDatabase#1.sdf; Password=*********\");
            connection.open();
            sqlCeCommand com = new sqlCeCommand(\"SELECT * FROM Accounts WHERE ID=Username\",connection);
            sqlCeDataReader reader = com.ExecuteReader();
            if (username.Text == reader[\"Username\"] as string && password.Text == reader[\"Password\"] as string)
            {
                MessageBox.Show(\"Login Successfull!\",\"Success\",MessageBoxButtons.OK,MessageBoxIcon.information);
            }
            else
            {
                MessageBox.Show(\"Access Denied 5\",\"Error\",MessageBoxIcon.Error);
            }
    

解决方法

        您是否有一个名为\“ ID \”的列? 看来您要在\“ Username \”和\“ ID \”列中要求所有具有相同值的帐户?您是否打算用\“ ID \”代替某些内容? 例
Where Username = \'EnteredUsername\'
    ,        看起来您的查询\“ SELECT * FROM Accounts WHERE ID = Username \”可能是问题。如前所述,用户名是列名;看起来您应该将用户ID放在查询中,例如\“ dlopez \”:\“ SELECT * FROM Accounts WHERE ID = \'dlopez \'\”     ,        
where
子句是导致错误的原因。我假设您只想选择一个ID等于本地变量调用方“ 3”的帐户。一种解决方案是:
SqlCeCommand com = new SqlCeCommand(\"SELECT * FROM Accounts WHERE ID=\'\"
  + username + \"\'\",connection);
一个更正确的解决方案是使用SqlCeParameter:
SqlCeCommand com = new SqlCeCommand(\"SELECT * FROM Accounts WHERE ID=@UserName\",connection);
SqlCeParameter param = new SqlCeParameter(\"@UserName\",SqlDbType.NVarChar);
param.Value = username;
com.Parameters.Add(param);
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。