如何解决调用子例程ExecuteReader时获得异常
| 我有包含帐户信息的sql Server Compact 3.5数据库。但是每次调用函数ExecuteReader时,都会在下面得到此异常: 列名无效。 [节点 名称(如果有)=,列名称= 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 举报,一经查实,本站将立刻删除。