2012-11-17 74 views
3

我已經通過與此相關的另一個問題顯得檢索特定的項目,但我有一個不同的問題。我無法獲得要返回的特定項目,它只返回我的列名稱。我如何獲得物品返回?無法從數據集

public static string GetOneFieldRecord(string field, string companyNum) 
{ 
    DataSet ds = new DataSet(); 
    SqlCommand comm = new SqlCommand(); 

    string strSQL = "SELECT @FieldName FROM Companies WHERE CompanyNum = @CompanyNum"; 
    SqlConnection conn = new SqlConnection(); 
    conn.ConnectionString = @connstring; 
    comm.Connection = conn; 
    comm.CommandText = strSQL; 
    comm.Parameters.AddWithValue("@FieldName", field); 
    comm.Parameters.AddWithValue("@CompanyNum", companyNum); 

    SqlDataAdapter da = new SqlDataAdapter(); 
    da.SelectCommand = comm; 

    conn.Open(); 

    da.Fill(ds, "CompanyInfo"); 

    conn.Close(); 

    return ds.Tables[0].Rows[0].ItemArray[0].ToString(); 
} 

我也試過

return ds.Tables[0].Rows[0][0].ToString(); 

我剛開始無論是在字段變量。 如果我通過在(「公司名稱」,33),它返回「公司名稱」。

回答

3

您的查詢(在SQL事件探查器)是

SELECT 'CompanyName' FROM Сompanies WHERE СompanyNum = 33 

所以這正好返回 「公司名稱」 的字符串。您不能將列名作爲sqlparameter傳遞。你應該像

public static string GetOneFieldRecord(string field, string companyNum) 
{ 
    DataSet ds = new DataSet(); 
    SqlCommand comm = new SqlCommand(); 

    string strSQL = string.Format("SELECT {0} FROM Companies WHERE CompanyNum = @CompanyNum", field); 
    SqlConnection conn = new SqlConnection(); 
    conn.ConnectionString = @connstring; 
    comm.Connection = conn; 
    comm.CommandText = strSQL; 
    comm.Parameters.AddWithValue("@FieldName", field); 
    comm.Parameters.AddWithValue("@CompanyNum", companyNum); 

    SqlDataAdapter da = new SqlDataAdapter(); 
    da.SelectCommand = comm; 

    conn.Open(); 

    da.Fill(ds, "CompanyInfo"); 

    conn.Close(); 

    return ds.Tables[0].Rows[0].ItemArray[0].ToString(); 
} 

但是這段代碼可以用於SQL注入。

爲了避免SQL注入,你可以檢查現場變量,字段名是表列之一。

,或者你可以讓SELECT * FROMСompaniesWHEREСompanyNum= @CompanyNum從數據表中獲取指定列的值:

public static string GetOneFieldRecord(string field, string companyNum) 
{ 
    DataSet ds = new DataSet(); 
    SqlCommand comm = new SqlCommand(); 

    string strSQL = "SELECT * FROM Companies WHERE CompanyNum = @CompanyNum"; 
    SqlConnection conn = new SqlConnection(); 
    conn.ConnectionString = @connstring; 
    comm.Connection = conn; 
    comm.CommandText = strSQL; 
    comm.Parameters.AddWithValue("@FieldName", field); 
    comm.Parameters.AddWithValue("@CompanyNum", companyNum); 

    SqlDataAdapter da = new SqlDataAdapter(); 
    da.SelectCommand = comm; 

    conn.Open(); 

    da.Fill(ds, "CompanyInfo"); 

    conn.Close(); 

    return ds.Tables[0].Rows[0][field].ToString(); 
} 
+0

哇。我不能相信我錯過了這一點。謝謝。 – tkarnau

+0

是的,我以前就遇到了這個問題,我已經忘記了我是如何解決它。 – tkarnau