2016-05-26 1 views
0

区切られた.txtファイルから値を読み取り、データを解析してSQL Serverテーブルを更新するコードを記述しました。 .txtファイルには、約200行分のデータがあるので、私は問題がありますMicrosoft SQL ServerにデータをインポートするときにC#を使用して値を無視する

ifステートメントを書き、私が探している値を指定してから、それらを正しい列に入れます。私の問題は私のelse文です。今私は空の文字列として私はテーブルに空の文字列を持っていないので、それを更新しようとすると私にエラーを与えているだけで空の文字列として設定している。

テーブルを更新するとき、どうすればELSEを無視するのですか?

これは私が持つ問題している私のコードのセクションです:あなたが見ることができるように文が列の値を変更し、ということになるならば、私はそれぞれ異なるように、それは設定

foreach (var record in records) 
{ 
    Console.WriteLine(record.RESORT); 
    Console.WriteLine(record.FORMATTED_AMOUNT); 

    // This allows us to split what column a row goes into based on whether it is a day and what SUB_GRP_1 it is 
    string Heading = record.HEADING_2; 
    string Group = record.SUB_GRP_1; 
    string column; 

    if (Heading == "DAY" && Group == "OCC_PERC") 
    { 
     column = "Percent_Rooms_Occupied"; 
    } 
    else if (Heading == "DAY" && Group == "OCC_PERC_WO_CH") 
    { 
     column = "Percent_Rooms_Occupied_minus_Comp_and_House"; 
    } 
    else if (Heading == "DAY" && Group == "ADR_ROOM") 
    { 
     column = "ADR"; 
    } 
    else if (Heading == "DAY" && Group == "ADR_ROOM_WO_CH") 
    { 
     column = "ADR_minus_Comp_and_House"; 
    } 
    else if (Heading == "DAY" && Group == "ROOMREV_AVL_ROOMS_MINUS_OOO") 
    { 
     column = "Revenue_per_Available_Room_minus_OOO"; 
    } 
    else if (Heading == "DAY" && Group == "TOTAL_REVENUE") 
    { 
     column = "Total_Revenue"; 
    } 
    else if (Heading == "DAY" && Group == "ROOM_REVENUE") 
    { 
     column = "Room_Revenue"; 
    } 
    else if (Heading == "DAY" && Group == "FOOD_BEV_REVENUE") 
    { 
     column = "Food_And_Beverage_Revenue"; 
    } 
    else if (Heading == "DAY" && Group == "OTHER_REVENUE") 
    { 
     column = "Other_Revenue"; 
    } 
    else if (Heading == "DAY" && Group == "PHYSICAL_ROOMS") 
    { 
     column = "Total_Rooms_in_Hotel"; 
    } 
    else if (Heading == "DAY" && Group == "OCC_ROOMS") 
    { 
     column = "Rooms_Occupied"; 
    } 
    else if (Heading == "DAY" && Group == "OCC_MINUS_COMP_HU") 
    { 
     column = "Rooms_Occupied_minus_Comp_and_House_Use"; 
    } 
    else if (Heading == "DAY" && Group == "COMP_ROOMS") 
    { 
     column = "Complimentary_Rooms"; 
    } 
    else 
    { 
     column = ""; 
    } 

    // SQL connection. Creates connection and command and inserts the values taken from the File Helper engine into the SQL table 
    SqlCommand cmd; 
    SqlConnection conn; 

    conn = new SqlConnection("Data Source=hureports01;Initial Catalog=hureports;Integrated Security=True"); 
    conn.Open(); 

    var sqlCommand = string.Format(@"MERGE [HEWreport] AS target USING (select @Property_ID as Property_ID, @column as {0}) AS source ON (target.Property_ID = source.Property_ID) WHEN MATCHED THEN UPDATE SET {0}= source.{0} WHEN NOT MATCHED THEN INSERT (Property_ID, {0}) VALUES (source.Property_ID, source.{0});", column); 

    cmd = new SqlCommand(sqlCommand, conn); 
    cmd.Parameters.AddWithValue("@Property_ID", record.RESORT); 
    cmd.Parameters.AddWithValue("@column", record.FORMATTED_AMOUNT); 

    cmd.ExecuteNonQuery(); 
} 

を持っています値はテーブルの列と直接関連しています。しかし、私はそれが私のelseステートメントを無視するようにすることはできませんし、別の見出しやグループを持つ行に遭遇するたびに私にエラーを与えている

+0

SQLを実行するために、else文でキーワードcontinueを使用してください。明確にするために、 'continue'は次の' record in record'に移ります。 –

+0

このエラーが発生しました:System.Data.dllで 'System.Data.SqlClient.SqlException'型の未処理例外が発生しました 追加情報:パラメータ化されたクエリ '(@Property_ID nvarchar(5)、@ column nvarchar (4000))MERGE [HEWrepor 'は供給されなかったパラメータ' @column 'を予期します。 –

答えて

0

あなたのSQLクエリの周りにifステートメントをラップすることができます

if (column != "") // Some people will say that you should use String.Empty()... 
{ 

SQL Code... 

} 

あなたがもし、のElseIfコードの後に​​全く任意のコードを実行したくない場合は、あなたがコメントしてやると、1がある場合は、foreachループの反復を終了し、次のいずれかを開始するために引き続き使用することができます利用可能です。

+0

System.Data.dllで 'System.Data.SqlClient.SqlException'型の未処理の例外が発生しました。その他の情報:パラメータ化されたクエリ ' (@Property_ID nvarchar(5)、@ column nvarchar(4000))MERGE [HEWrepor 'は、パラメータ' @column 'が必要です。 –

+0

問題はこの文の 'cmd.Parameters.AddWithValue(" @ column "、record.FORMATTED_AMOUNT);' @columnパラメータが設定されていません。 'string column'は空白ではありません。 –

+0

@MaxSorinどうすれば修正できますか?私はそれがレコードに設定されていたと思った.FORMATTED_AMOUNT –

関連する問題