很抱歉没有把问题放在标题中,真正的问题是我看不到代码的问题,但它没有产生我想要的东西。
所以我编写了一些代码,用于获取数据库的Password字段并检查其值,然后将该值存储为密码变量中的字符串。在SQL Management studio中,值为'MyPass',这是我在将密码变量打印为MessageBox时所期望的。相反,我得到两个盒子,'密码',然后'密码123'。表中唯一的列:Login,是一个名为Password的列。
以下是使用声明:
using(SqlConnection con = new SqlConnection(connectionString))
{
string query = "SELECT Password FROM LoginInfo";
con.Open();
//SqlCommand to be executed against my DB with the query text and the connection object.
SqlCommand myCommand = new SqlCommand(query, con);
//Sends CommandText to connection. Creates a
SqlDataReader read = myCommand.ExecuteReader();
while(read.Read())
{
//Convert read to IDataRecord.
ReadSingleRow((IDataRecord)read);
}
read.Close();
}
如果我的评论不正确,我道歉,我把它们写下来,因为它们帮助我思考。
您可以阅读我对下面代码的解释,并告诉我我的思考过程有什么问题,或者您可以只搜索代码示例中的错误。
我的解释(如果你放纵我):
因此,在using语句中,我们创建了一个连接,一个查询字符串,一个SqlCommand和一个SqlDataReader。传递SqlCommand查询字符串和连接对象然后我们将其实例设置为等于SqlDataReader,使用方法ExecuteReader()将其命名为“read”,该方法将命令文本带到连接对象的任何位置。
接下来我们使用while循环,我们使用.Read()将读者推进到第一条记录,因为我的db只有一个记录'Password',这只是将它移动到那个。在我们使用ReadSingleRow方法的同时将读取器实例转换为IDataRecord :((IDataRecord)读取)。
ReadSingleRow方法:
public void ReadSingleRow(IDataRecord record)
{
UserPass = record.GetString(record.GetOrdinal("Password"));
MessageBox.Show(UserPass);
}
IDataRecord检索oridinal(ID)密码的字符串值。我的理解是它查看Password:Mypass的值,然后将其存储在UserPass字符串变量中。 MessageBox当然会将变量脱节作为测试,看看它是否有效。它没有。
所以我的问题很烦人:为什么这不起作用?也许我错过了使用IDataRecord。