我正在尝试在我的网站上显示我的SQLSEVER数据库中的图片。我的用户有一个图片数据类型的图片字段。如果图片列为空,那么我希望显示的图片是egg.jpg,但现在每个人的图片都是egg.jpg,即使他们在数据库中有图片。这是我的方法。
public string getImageUrl()
{
System.Data.SqlClient.SqlConnection sc = new System.Data.SqlClient.SqlConnection();
sc.ConnectionString = "Server =MRCOMPUTER2\\SQLEXPRESS; Database = WBL;Trusted_Connection=Yes;";
sc.Open();
System.Data.SqlClient.SqlCommand insert = new System.Data.SqlClient.SqlCommand();
insert.Connection = sc;
insert.CommandText = "SELECT profilePicture from SystemUser";
insert.ExecuteNonQuery();
SqlDataReader reader = insert.ExecuteReader();
string url = "";
while (reader.Read())
{
if ( !DBNull.Value.Equals(reader[0]))
{
url = "data:Image / png; base64," + Convert.ToBase64String((byte[])reader[0]);
}
else {
url = "images/egg.jpg";
}
}
return url;
}
答案 0 :(得分:1)
您的代码会返回表格中 last 用户的图片。
下面:
insert.CommandText = "SELECT profilePicture from SystemUser";
从表格中选择所有用户(而不仅仅是您当前显示的用户)。然后:
while (reader.Read())
{
...
url = ...
...
}
你在你的while循环的每次迭代中重新分配 url
。这在语义上等同于:
url = ... /* The value determined from the last record of the reader. */
因此,您的所有用户都会显示相同的图片 - 表格中 last 用户之一。
答案 1 :(得分:0)
您可以尝试使用列的名称,例如
var Val = (String)reader["column name"];
另外,尝试这样的测试:
while (reader.Read())
{
var testVal = reader.GetString(0);
Var testVal2 = reader.GetString(1);
答案 2 :(得分:0)
您的SELECT语句是否附加到ExecuteNonQuery?
脱掉它。
只需执行READER语句......
答案 3 :(得分:0)
试试这个:
static void Main(string[] args)
{
string connectionString = "Server=.;Database=AA;Trusted_Connection=True;";
/*
CREATE TABLE [dbo].[SystemUser]
(
[ProfilePicture] [varbinary](max) NULL
)
*/
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = @"
INSERT [AA].[dbo].[SystemUser] ([ProfilePicture]) VALUES (@ProfilePicture);
INSERT [AA].[dbo].[SystemUser] ([ProfilePicture]) VALUES (NULL);
";
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = sql;
command.CommandType = CommandType.Text;
byte[] bytes = File.ReadAllBytes(@"1.jpg");
command.Parameters.AddWithValue("@ProfilePicture", bytes);
connection.Open();
command.ExecuteNonQuery();
}
DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = @"
SELECT TOP 1000 [ProfilePicture] FROM [AA].[dbo].[SystemUser];
";
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = sql;
command.CommandType = CommandType.Text;
connection.Open();
SqlDataAdapter da = new SqlDataAdapter(command);
da.Fill(ds);
}
var rows = ds.Tables[0].Rows.Cast<DataRow>();
foreach (DataRow row in rows)
{
byte[] bytes = row.Field<byte[]>(0);
if (bytes != null)
{
string fileName = Guid.NewGuid().ToString("N") + ".jpg";
File.WriteAllBytes(fileName, bytes);
}
}
}