none
SQL Server 2005 Express Edition 写真データの変更をするとタイムアウトになる。 RRS feed

  • 質問

  • Visual Studio 2005 でWebアプリを開発しております。DBMSはSQL Server 2005 Express Editionです。

    今、現在判明していることは、データベーステーブル内に写真データを格納するimageフィールドがあると、下記のタイムアウトエラーがでます。

    単純な、レコド削除SQL、レコード変更SQLを実行しても同様なタイムアウトになります。

    どなたかこの現象の回避策をご教授お願い致します。

    以下に写真データの変更コードを記載します。

                Dim cns As String = Application("sqlconnectstring")
                Dim conn As New SqlConnection(cns)

                Dim sqlstr1 As String = "UPDATE article1 SET PC写真1=@PC写真1,携帯写真1=@携帯写真1 WHERE (art1id='" & Session("art1id") & "')"
                Dim pa1 As New SqlParameter("@PC写真1", FileUpload1.FileBytes)
                Dim pa2 As New SqlParameter("@携帯写真1", bs1)

                Dim cmd1 As New SqlCommand(sqlstr1, conn)
                cmd1.Parameters.Add(pa1)
                cmd1.Parameters.Add(pa2)

                conn.Open()
                Try
                    cmd1.ExecuteNonQuery()
                Catch ex As Exception
                    Label1.Text = ex.ToString
                    conn.Close()
                    Exit Sub
                End Try
                conn.Close()

    System.Data.SqlClient.SqlException: タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。ステートメントは終了されました。

    2006年8月3日 11:22

すべての返信

  • cmd1.CommandTimeout にデフォルトの30秒以上の値をセットしてみたらどうなるでしょうか?
    2006年8月3日 11:48
    モデレータ
  • trapemiya様

    この方法で60秒をセットしても同じ現象がでました。

    imageフィールドが無いテーブルの更新、削除などは正常にできます。

    ただimageフィールドを保有するテーブルのレコード更新、削除でタイムアウトになります。

    原因不明です。

     

    2006年8月3日 14:35
  • う~ん・・・。SqlDbTypeにVarBinaryやImageを指定してみたらどうなるでしょうか?
    2006年8月4日 1:18
    モデレータ
  • おそらく型指定でしょう。

    CREATE TABLE tblImages(ID INT IDENTITY(1,1) PRIMARY KEY,
    ImageName NVARCHAR(255) NOT NULL,
    ImageValue IMAGE,
    EntryDate DATETIME
    )
    こんなテーブル作って
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;

    public partial class _Default : System.Web.UI.Page
    {
        protected void bUpload_Click(object sender, EventArgs e)
        {
            if (this.fuImage.FileName != null && this.fuImage.FileName.Length > 0)
            {
                string fileName = this.fuImage.FileName;
                byte[] fileByes = this.fuImage.FileBytes;
                using (SqlConnection sqlConnection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\TestDB.mdf;Trusted_Connection=yes,User Instance=yes"))
                {
                    using (SqlCommand sqlCommand = new SqlCommand("INSERT INTO tblImages(ImageName, ImageValue, EntryDate) VALUES(@in, @iv, GETDATE());", sqlConnection))
                    {
                        sqlCommand.Parameters.Add(new SqlParameter("@in", SqlDbType.NVarChar, 255));
                        sqlCommand.Parameters.Add(new SqlParameter("@iv", SqlDbType.Image));
                        sqlCommand.Parameters["@in"].Value = fileName;
                        sqlCommand.Parameters["@iv"].Value = fileByes;
                        sqlConnection.Open();
                        sqlCommand.ExecuteNonQuery();
                    }
                }
            }
        }
    }

    なコードでやってみたけど、できましたよ。

    2006年8月4日 15:49