2017-08-30 7 views
-1

SQLサーバーを初めて使用しています。コンソールアプリケーション(C#)からSQLデータベースを読み書きする方法

上記の私の最初の関数は、単に2番目の関数を呼び出してパラメータとしてリストを渡すために使用されています。
今私は、分割された文字列配列から情報を解析しています。 各値は何かを意味し、これは私がコンソールに表示しています。 しかし、私はそれをSQLデータベースに保存する必要があります。解析された値。 私はSQLiteでいくつかの経験がありますが、これは少し異なります。 私は物事を捜して、これは私が思い付くことができるものです。しかし、私は列を更新する簡単な方法は見つけられませんでした。私のカラム名は、console.writelineコードで言及されているものと同じです。例えば、いくつかのカラムは "data record"、 "record_id"、 "article_code"などです。例えば ​​"2.1 Movement record"の値を、次に "record_id"にはdividerTrans [0]の値を設定します。誰かがこれを行う効率的な方法で私を助けてくれますか?

class save_parsed_data 
{ 
    static string connectionstring; 
    static SqlConnection connection; 

    public static void save_data(string transaction) 
    { 
     connectionstring = ConfigurationManager. 
       ConnectionStrings["testEnvironmentSAMPLE.Properties.Settings.sampleConnectionString"].ConnectionString; 

      List<char> dividedTrans = new List<char>(transaction.ToCharArray()); 

      if (transaction.StartsWith("21")) 
       StringWith21(dividedTrans); 

      Console.ReadKey(); 
    } 

    public static void StringWith21(List<char> dividedTrans) 
    { 
     using (connection = new SqlConnection(connectionstring)) 
     using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Sample_values", connection)) 
     { 
      DataTable codaTable = new DataTable(); 
      adapter.Fill(codaTable); 

      Console.WriteLine("\nData Record 2.1: Movement Record."); 

      Console.WriteLine("Record Identification: {0}", dividedTrans[0]); 

      Console.WriteLine("Article Code: {0}", dividedTrans[1]); 

      Console.WriteLine("Sequence Number: {0}", new string(dividedTrans.GetRange(2, 4).ToArray())); 

      Console.WriteLine("Detail Number: {0}", new string(dividedTrans.GetRange(6, 4).ToArray())); 

      Console.WriteLine("Reference Number of bank: {0}", new string(dividedTrans.GetRange(10, 21).ToArray())); 

      Console.WriteLine("Movement Sign: {0}", new string(dividedTrans.GetRange(31, 1).ToArray())); 

      Console.WriteLine("Amount: {0}", Convert.ToString(Int32.Parse(string.Join("", dividedTrans.GetRange(32, 15))))); 

      Console.WriteLine("Value Date: {0}", DateandTime(string.Join("", dividedTrans.GetRange(47, 6))).ToString("d")); 

      Console.WriteLine("Transaction Code: {0}", new string(dividedTrans.GetRange(53, 8).ToArray())); 

      Console.WriteLine("Communication Type: {0}", new string(dividedTrans.GetRange(61, 1).ToArray())); 

      Console.WriteLine("Communication zone: {0}", new string(dividedTrans.GetRange(62, 53).ToArray())); 

      Console.WriteLine("Entry Date: {0}", DateandTime(string.Join("", dividedTrans.GetRange(115, 6))).ToString("d")); 

      Console.WriteLine("Sequence Number: {0}", new string(dividedTrans.GetRange(121, 3).ToArray())); 

      Console.WriteLine("Globalization Code: {0}", new string(dividedTrans.GetRange(124, 1).ToArray())); 

      Console.WriteLine("Next Code: {0}", new string(dividedTrans.GetRange(125, 1).ToArray())); 

      Console.WriteLine("Blank: {0}", new string(dividedTrans.GetRange(126, 1).ToArray())); 

      Console.WriteLine("Linker Code: {0}", new string(dividedTrans.GetRange(127, 1).ToArray())); 
     } 
    } 

} 
+0

に示すように、生のSQLです。 –

+0

"DBに保存する"とは、SQLテーブルに挿入するか更新する必要があることを意味します。最初にSQLテーブルをDataTableに読み込むと、そのテーブルを更新すると結論づけることができます。または挿入しますか? – Serg

+0

テーブルに挿入する必要があります。私は後でそれを更新するつもりですが、今はありません。今、テーブルは空です。 –

答えて

1

私の提案は、いくつかのORM(オブジェクトリレーショナルマッピング)ツールを使用することです。 C#では、2つの主要なEntityFrameworkとNHibernateがあります。私はEntityFrameworkの単純さを優先します。

1

データを書き込む方法はたくさんあります。

片道 `エンティティframework`を使用しSQL update statement in C#

using (var connection = new SqlConnection(connectionString)) 
using (var command = connection.CreateCommand()) 
{ 
    command.CommandText = "UPDATE Student SET Name = @name where id = @id"; 

    command.Parameters.AddWithValue("@name", name); 
    command.Parameters.AddWithValue("@id", myId); 

    connection.Open(); 

    command.ExecuteNonQuery(); 

    connection.Close(); 
} 
関連する問題