0
    SqlConnection conn = new SqlConnection();
    conn.ConnectionString = "Data Source=PROMOD-PC;Initial Catalog=travel_Directions;Integrated Security=True";

    String Strt_Address = TextBox1.Text;
    String End_Address = TextBox2.Text;

    String filePath = FileUpload1.PostedFile.FileName;
    String filename = Path.GetFileName(filePath);
    String ExtStr = Path.GetExtension(filename);
    String contenttype = String.Empty;

    switch (ExtStr)
    {
        case ".png":
            contenttype = "image/png";
            break;

        case ".jpg":
            contenttype = "image/jpg";
            break;

        case ".gif":
            contenttype = "image/gif";
            break;
    }

    if (contenttype != string.Empty)
    {
        Stream Strmf = FileUpload1.PostedFile.InputStream;
        BinaryReader br = new BinaryReader(Strmf);
        Byte[] imgbytes = br.ReadBytes((Int32)Strmf.Length);


        //SqlDataReader sqldread = new SqlDataReader();

        String selQuery = "SELECT Id FROM MapDataImage WHERE Source='" + TextBox1.Text + "';";
        {

            SqlCommand scmd = new SqlCommand(selQuery, conn);

            conn.Open();

            SqlDataReader sqldread = scmd.ExecuteReader();

            while (sqldread.Read())
            {
                int Dbid = (int)sqldread["Id"];
                //string DbId = sqldread.GetInt32("Id").ToString();

                Label4.Text = Convert.ToString(Dbid);

                String QueryStr = "INSERT INTO User_Images(Id,Image) VALUES ('" + Dbid + "',@Image)";
                SqlCommand scmd1 = new SqlCommand(QueryStr, conn);
                scmd1.Parameters.Add("@Image", SqlDbType.VarBinary).Value = imgbytes;
                scmd1.ExecuteNonQuery();
            }


            //String QueryStr = "UPDATE MapDataImage SET Image = @Image WHERE Source='" + TextBox1.Text + "';";
            //SqlCommand scmd = new SqlCommand(QueryStr, conn);
            //scmd.Parameters.Add("@Image", SqlDbType.VarBinary).Value = imgbytes;
            sqldread.Close();
            conn.Close();
        }
 }

首先,如果条件将转换为我通过文件上传控件上传文件的字节。

Select 命令将检查用户文本框输入名称是否等于数据库值。如果相等,代码将从该表中获取 id 并将其存储为 int 变量。

我上传的图像,该 id 将转到另一个表。

我的第一个 SQL 表 =

Id = int
Source = varchar(max)

我的第二个 SQL 数据表 =

image_id = int (primary key) Auto increment
Id = int (first table id store in here)
image = (varbinary)MAX

场景是……例如 Facebook,如果 Facebook 帐户名有效,我们可以上传无限的照片。所以这里的情况是一样的。如果我的名字与数据库相同,它将检索其 ID,并在该 ID 下将图像插入到第二个数据表

当我想检索这些图像时。我可以使用 for 循环从第二个表中检索图像.. 是吗?

4

4 回答 4

0

您将需要另一个连接对象。如果一个命令已准备好与之关联,则可以使用使用您的连接。
所以你可以做的是创建命令的另一个对象并使用它。
其他明智的改变你的逻辑如下

读取时创建一个数组

   ArrayList ar=new ArrayList();
   while (sqldread.Read())
   {
        int Dbid = (int)sqldread["Id"];
        ar.add(Dbid); 
   }

使用数组列表上的 for 循环处理命令
并使用更新命令。

 for(int i=0;i<ar.length;i++)
 {
       //write update statement here.
 }
于 2013-07-06T05:08:59.573 回答
0

您需要在从数据库中SqlDataReader获取Id值后立即关闭该对象,并将读取器与下一个命令对象重新关联,如下所示:

while (sqldread.Read())
{
     int Dbid = (int)sqldread["Id"];
}

sqldread.Close();

Label4.Text = Convert.ToString(Dbid);

String QueryStr = "INSERT INTO User_Images(Id,Image) VALUES ('" + Dbid + "',@Image)";
SqlCommand scmd1 = new SqlCommand(QueryStr, conn);
scmd1.Parameters.Add("@Image", SqlDbType.VarBinary).Value = imgbytes;

SqlDataReader sqldread = scmd1.ExecuteNonQuery();

注意:您还应该查看该using语句,该语句允许在逻辑中的成功或错误(读取:异常)时正确关闭数据库连接。

于 2013-07-06T02:15:16.903 回答
0

尝试在 sqldread.Read() 中使用新连接

SqlConnection conn2 = new SqlConnection();
conn2.ConnectionString = ""; //your connection string
SqlCommand scmd1 = new SqlCommand(QueryStr, conn2);
scmd1.Parameters.Add("@Image", SqlDbType.VarBinary).Value = imgbytes;
conn2.Open();
scmd1.ExecuteNonQuery();
conn2.Close();
于 2013-07-06T02:12:57.320 回答
0

当您仍在从 SqlDataReader 读取数据时,您不能在循环中重用连接。两种选择:

  • 读取所有 id 并将它们保存在临时列表中。然后循环使用此列表。
  • 创建一个新连接来插入图像。
于 2013-07-06T02:14:38.577 回答