0

ユーザーごとにExcelスプレッドシートをアップロードし、アップロードすると、別のSQLテーブルに基づいてSQLの列の1つを更新するコードがあります。Excelスプレッドシートのデータが、SQLテーブルの更新オプションの1つと一致することを確認したいと思います。最も簡単な方法は何ですか?つまり、NULL値が返された場合にWebサイトにエラーメッセージを表示するSQLステートメントを追加できますか、それともC#で複雑なIFステートメントを作成する必要がありますか?これが私がこれまでに持っているものです(SQLステートメントを参照):

try
    {

        FileUpload.SaveAs(path);
        if (TextBox.Text != "")
        sheetname = TextBox.Text;
        System.Data.OleDb.OleDbConnection MyConnection;
        System.Data.DataSet DtSet;
        System.Data.OleDb.OleDbDataAdapter MyCommand;  //check sheet name
        MyConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;");
        MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [" + sheetname + "$]", MyConnection);
        //MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [July Noms$]", MyConnection);
        MyCommand.TableMappings.Add("Table", "TestTable");
        DtSet = new System.Data.DataSet();
        MyCommand.Fill(DtSet);
        SqlConnection curConnection = new SqlConnection(@"Data Source=1tc-Techcomm2;Initial Catalog=EventRegistration;Integrated Security=True");
        curConnection.Open();
        SqlCommand curCommand;
        SqlParameter param;
        string str;

        for (int i = 0; i < DtSet.Tables[0].Rows.Count; i++)
        {
            if (DtSet.Tables[0].Rows[i][1] == DBNull.Value)
                continue;
            curCommand = curConnection.CreateCommand();
            curCommand.CommandText = @"Insert into TestSP (SessionHead_EventId, SessionHead_Title, SessionHead_TypeId, SessionHead_Description, SessionHead_Status, SessionHead_Presenter, SessionHead_Champion, SessionHead_AnnounceDate, SessionHead_Objectives, SessionHead_LaunchDate, SessionHead_Notes, SessionHead_Schedule, SessionHead_SpecialNeeds, SessionHead_Equipment, SessionHead_CDA) Values (@a,@b,@c,@d,@e,@f,@g,@h,@i,@j,@k,@l,@m,@n,@o)";
            for (int j = 0; j < 15; j++)
            {
                param = new SqlParameter();
                str = "@";
                str += (char)('a' + j);
                param.ParameterName = str;
                param.SqlDbType = SqlDbType.VarChar;
                param.Value = DtSet.Tables[0].Rows[i][j];
                curCommand.Parameters.Add(param);

            }
            Label1.Text = "THE EXCEL DATE HAS SUCCESSFULLY BEEN SENT TO THE DATABASE";
            curCommand.ExecuteNonQuery();
            curCommand.CommandText = "UPDATE TestSP SET SessionHead_TypeId = ( SELECT SessionType.SessionType_Id FROM SessionType WHERE SessionType.SessionType_Title = TestSP.SessionHead_TypeId) WHERE EXISTS ( SELECT SessionType.SessionType_Id FROM SessionType WHERE SessionType.SessionType_Title = TestSP.SessionHead_TypeId)"; 
//****Can I add a statement here stating that if a NULL value is returned, to give me an error message on the website?****

        curCommand.ExecuteNonQuery();

        }


        MyConnection.Close();
        curConnection.Close();

    }
    catch (Exception ex)
    {
        //Response.Write(ex.ToString());
        Label1.Text = ex.Message;
        Label2.Text = ex.Message; 

    }


}

どんな助けでも大歓迎です!!

4

2 に答える 2

1

ストアドプロシージャを使用してSQLエラーメッセージを返すことをお勧めします。

于 2012-05-16T17:30:47.123 に答える
0

query が false の場合、 catch ofSystem.Data.SqlClient.SqlExceptionはエラー メッセージを表示します。またExecuteNonQuery、影響を受ける行の整数も提供します。したがって、0影響を受ける行がなく-1、ロールバックなどの問題がある場合。

于 2012-05-16T17:39:45.787 に答える