2012-04-22 155 views
0

我試圖讀取一個SQL Server數據庫中的圖像的圖像,但我得到一個錯誤:無法讀取數據庫

Parameter is not valid

誰能幫我?如何解決它?

byte[] im = connection.ReadImg(id); 

if (im != null) 
{ 
    MemoryStream st1 = new MemoryStream(im); 
    pictureBox1.Image = Image.FromStream(st1); 
} 
else 
    pictureBox1.Image = Image.FromFile(fn); 

public byte[] ReadImg(string id) 
{ 
    cmd.Connection = con; 
    cmd.CommandText = "SELECT photo FROM User WHERE id=" + id; 
    byte[] image = null; 

    con.Open(); 

    try 
    { 
     image = (byte[])cmd.ExecuteScalar(); 
    } 
    catch 
    { 
     image = null; 
    } 

    con.Close(); 

    return image; 
} 
+0

你確定ReadImg()返回有效數據嗎?這可能是你需要分享的代碼。 – roken 2012-04-22 17:41:17

+0

我想是的,我在這裏添加ReadImg方法 – 2012-04-22 17:50:53

回答

2

如果id是一個字符串,你必須把它作爲一個字符串傳遞:如果不使用推薦的參數的方式

cmd.CommandText = "SELECT photo FROM User WHERE [email protected]"; 
cmd.Parameters.AddWithValue("@id", id); 

,問題是你需要有字符串參數括在單報價:

cmd.CommandText = "SELECT photo FROM User WHERE id='" + id + "'"; 

這被認爲是不好的做法。

+0

是的,id - 是字符串。我嘗試了你的解決方案,但不起作用,同樣的錯誤。我試過像這樣: cmd.CommandText =「SELECT photo FROM UserWHERE id = @ id」; cmd.Parameters.AddWithValue(「@ id」,id); – 2012-04-22 18:07:34

+0

@JohnSmith接下來,嘗試在表和字段周圍放置括號:'[photo]','[User]'和'[id]',因爲它們可能與關鍵字衝突。 – LarsTech 2012-04-22 18:20:27

+0

好的,謝謝。我的問題呢? – 2012-04-22 18:26:36

-1

SELECT語句不返回標量;您需要使用ExecuteReader或類似的;

SqlDataReader reader = cmd.ExecuteReader(); 
using(reader) 
{ 
    while(reader.Read()) 
    { 
     // Do something with reader["photo"]. 
    } 
} 

爲了提供更多的,我們需要的idphoto的數據類型。