Querying SQL Server from C#

本文关键字:from Server SQL Querying | 更新日期: 2023-09-27 18:27:52

我正试图从SQL Server中的数据库表中获取一个人的帐户余额。

我创建了一个SQL命令,它使用一个人的卡ID来查找他们的帐户ID,然后在另一个表中检查余额。

我想我遗漏了什么-Class1.cardNumber是你登录时选择的卡号。

好的,完整的细节是有两种形式第一种形式是一个完美工作的atm的登录,然后我放入一个类变量来捕获第一种形式中使用的卡号(class1.cardnumber),然后我创建了一个有点像的命令

SELECT CARDTDetails,CustomerDetails(名称不同)则是使用CustomerNumber的2之间的链接WHERE(balance=@balance)AND(cardNumber=@cardNumber)AND(CustomerNumber=@CustomerNumber)

这是工作表中唯一对更新缓慢感到抱歉的代码。

sqlCommandBalance.Connection.Open();
sqlCommandBalance.Parameters["@accountID"].Value = Class1.cardNumber;
SqlDataReader readdata = sqlCommandBalance.ExecuteReader();
string balanceDB = "";
while (readdata.Read())
{
    balanceDB = readdata["@balance"].ToString();
}
sqlCommandBalance.Connection.Close();
sqlCommandBalance.Connection.Dispose();
textBalance.Text += " " + balanceDB.ToString();

Querying SQL Server from C#

您可能指的是readdata["balance"].ToString(),而不是"@balance"。

由于没有足够的信息,还不能直接回答您的问题。

但这正是你想要用来安全地实现你正在做的事情的模式。

var resultValues = new List<string>();
using (var dbConn = new SqlConnection("server=myserver;database=mydb;integrated security=sspi;"))
using (SqlCommand dbCmd = dbConn.CreateCommand())
{
    dbConn.Open();
    dbCmd.CommandText = "SELECT myfield FROM mytable WHERE anotherField LIKE @p1";
    dbCmd.Parameters.AddWithValue("@p1", "somevalue");
    using (SqlDataReader reader = dbCmd.ExecuteReader())
    {
        while (reader.Read())
        {
            resultValues.Add(reader["myField"] == DBNull.Value ? null : (string)reader["myField"]);
        }
    }
}

或者如果您的查询只返回一行,

double result;
using (var dbConn = new SqlConnection("server=myserver;database=mydb;integrated security=sspi;"))
using (SqlCommand dbCmd = dbConn.CreateCommand())
{
    dbConn.Open();
    dbCmd.CommandText = "SELECT myfield FROM mytable WHERE anotherField LIKE @p1";
    dbCmd.Parameters.AddWithValue("@p1", "somevalue");
    using (SqlDataReader reader = dbCmd.ExecuteReader())
    {
        if (reader.Read())
        {
            result = reader["myField"] == DBNull.Value ? -1 : Convert.ToDouble(reader["myField"]);
        }
    }
}

当你回来提供更多信息时,我们可能会帮助你完成这项工作。

如果您没有得到"balanceDB"的答案,则意味着

while (readdata.Read())

没有触发。所以这意味着你没有得到任何结果。检查您是否运行了正确的SQL函数,并传递了正确的参数。代码本身对我来说还可以(不过有点乱)。

你能追踪一下情况吗?

补充:此外,您可能最终应该关闭您的连接。如果你在那里抛出一个异常,你会保持连接打开。