2012-03-15 98 views
-3

我正試圖從SQL Server中的數據庫表中獲取某人的帳戶餘額。從C查詢SQL Server#

我已經創建了一個SQL命令,它使用一個人的卡ID來查找他們的賬戶ID,然後檢查另一個表中的餘額。

我想我失去了一些東西 - Class1.cardNumber是在登錄時選擇的卡號

確定全部細節是那裏有2種形式的第一種形式是在ATM登錄完美的作品我呢。把一個類變量捕獲在第一種形式(class1.cardNumber)中使用的卡號,然後我創建了一個有點像

的命令SELECT CARDDetails,CustomerDetails(位不同的名稱) 然後它的2使用客戶編號 WHERE(餘額= @餘額)AND(cardNumber = @ cardNumber)AND(客戶編號= @客戶編號)

這是表單中唯一真正對慢速更新抱歉的代碼。

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(); 
+2

我將要重寫一遍。 – tomfanning 2012-03-15 17:59:36

+0

好的,重寫它。您需要提供更多信息 - 首先,查詢在哪裏?桌子是什麼樣的?請進一步編輯您的問題並提供更多信息。如果你不想讓你的問題陷入低谷和/或關閉,我會採取行動! – tomfanning 2012-03-15 18:05:09

+0

爲什麼balanceDB是一個字符串?你在哪裏設置命令類型或存儲過程名稱?什麼是存儲過程?你不檢查是否有任何行被返回。不要試圖捕捉錯誤是否被拋出。 – Paparazzi 2012-03-15 18:26:30

回答

2

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

-1

如果你沒有得到的「balanceDB」的回答則意味着

while (readdata.Read()) 

沒有觸發。所以這意味着你沒有得到任何結果。檢查您是否正在運行正確的SQL函數,並傳遞正確的參數。代碼本身對我來說看起來不錯(雖然有點混亂)。

你可以跟蹤它,看看是否是這種情況?

補充:你也可能最後關閉你的連接。如果你在那裏拋出異常,你會保持連接打開。

+0

會嘗試,謝謝你們現在感謝我的命令幫助我的SELECT CARD(火車atm忘了名字),賬戶 – 2012-03-15 18:08:20

+0

這是作業,是不是Rhys? – tomfanning 2012-03-15 18:18:55

+0

@tomfanning它的任務是 – 2012-03-15 19:30:36

0

不是你的問題的直接答案,但是,因爲沒有足夠的信息。

但是,這是你想用來安全地實現你正在做的事情的那種模式。

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"]); 
     } 
    } 
} 

當你回來更多的信息,我們也許可以幫助得到這個工作。