我正在编写一个用于银行帐户的程序,人们可以在其中注册一个帐户并获得自己的银行帐户。
现在,我的数据读取器不断在我的标签中返回一些奇怪的参数。
public void Saldo()
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Jobva\source\repos\Fundamentals\Fundamentals\bin\Debug\BankOfFontys.mdf;Integrated Security=True");
con.Open();
SqlCommand myCommand2 = con.CreateCommand();
myCommand2.CommandText = "SELECT saldo FROM Account WHERE gebruikersnaam ='" + naam + "'";
myCommand2.CommandType = CommandType.Text;
SqlDataReader reader2 = myCommand2.ExecuteReader();
saldoLbl.Text = Convert.ToString(reader2);
}
这是我的代码,但是由于某种原因它没有返回实际值,我是否也在命令中使用了正确的版本,“ naam”是一个字符串,其中包含用户输入的用户名,因此应该仅在该用户名与字符串匹配的列中搜索。
这是如何工作的?
答案 0 :(得分:1)
在读取一行(并检查是否确实有一行)之后,需要从阅读器中选择值。在下面的代码示例中,我假设您的saldo是一个整数值。
using (SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Jobva\source\repos\Fundamentals\Fundamentals\bin\Debug\BankOfFontys.mdf;Integrated Security=True")) {
con.Open();
SqlDataReader reader2 = myCommand2.ExecuteReader();
if (reader2.Read()) {
saldoLbl.Text = reader2.GetInt32(0).ToString();
}
reader2.Close();
}
阅读文档可能是一个好主意,因为这是在C#中使用SQL的基础:
https://docs.microsoft.com/de-de/dotnet/framework/data/adonet/retrieving-data-using-a-datareader
您还可以从那里了解ExecuteScalar()哪种情况更适合您的用例。
答案 1 :(得分:0)
您将返回SqlDataReader
对象的字符串表示形式。您实际要做的是从数据读取器获取列。有多种方法可以执行此操作,但是您可以尝试执行以下操作:
SqlDataReader reader2 = myCommand2.ExecuteReader();
if (reader2.HasRows)
{
while (reader2.Read())
{
// reader2[] returns objects so cast them to your datatype
var yourValue = reader2[0].ToString();
// alternative syntax using column names
int intValue = Convert.ToInt32(reader2["ID"]);
}
}
reader[index]
将按选择顺序获得列,而reader["ColumnName"]
将按列名获取值。
您应该查看SqlDataReader
文档here。