質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

解決済

CSVからデータを取得し、データベースに書き込む方法

musix55
musix55

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

3回答

0評価

0クリップ

10671閲覧

投稿2017/01/18 13:55

何度もお世話になっております。
現在作っているプログラム(Windowsフォームアプリ)で、CSVから特定の列のデータを取得し(配列に格納した後)データベースに書き込むという動作を実現したいと思っています。
しかし何度試してもエラーになってしまい、皆さんの知恵を拝借したく相談しました。
複数回書き直したためぐちゃぐちゃになってしまっていますが、やりたい方向としては取得した文字列を区切って配列に入れ、データベースに追加するという流れをループで繰り返すという感じです。
(他にもTextFieldParserなど?いろいろな書き方があると思います)
あまり複雑でなければ他の手段でも構いませんので、ぜひアドバイスいただけたらと思います。

C#

using System; using System\.Data; using System\.Windows\.Forms; using System\.Configuration; using System\.Data\.SqlClient; using System\.IO; using System\.Text; private void btnImport_Click\(object sender, EventArgs e\) { var connectionString = ConfigurationManager\.ConnectionStrings\["db"\]\.ConnectionString; using \(var connection = new SqlConnection\(connectionString\)\) { try { connection\.Open\(\); using \(var transaction = connection\.BeginTransaction\(IsolationLevel\.ReadCommitted\)\) using \(var command = new SqlCommand\(\) { Connection = connection, Transaction = transaction }\) { try { StreamReader sr = new StreamReader\(@"C:\\Program Files\\受注伝票\.csv", Encoding\.GetEncoding\("Shift_JIS"\)\); sr\.ReadLine\(\); while \(sr\.Peek\(\) > -1\) { string line = sr\.ReadLine\(\); string\[\] lineArray = line\.Split\(','\); command\.CommandType = CommandType\.StoredProcedure; command\.CommandText = @"import"; command\.Parameters\.Add\(new SqlParameter\("@CreateDate", lineArray\[7\]\)\); command\.Parameters\.Add\(new SqlParameter\("@OrderCode", lineArray\[17\]\)\); command\.Parameters\.Add\(new SqlParameter\("@DealNumber", Convert\.ToDecimal\(lineArray\[21\]\)\)\); command\.Parameters\.Add\(new SqlParameter\("@DealCode", lineArray\[42\]\)\); command\.Parameters\.Add\(new SqlParameter\("@LastDeliveryDate", lineArray\[67\]\)\); command\.Parameters\.Add\(new SqlParameter\("@DetailNumber", Convert\.ToDecimal\(lineArray\[95\]\)\)\); command\.Parameters\.Add\(new SqlParameter\("@OriginalUnitPrice", Convert\.ToDecimal\(lineArray\[141\]\)\)\); command\.Parameters\.Add\(new SqlParameter\("@SalesUnitPrice", Convert\.ToDecimal\(lineArray\[143\]\)\)\); command\.Parameters\.Add\(new SqlParameter\("@ShipmentInduvidualAmount", Convert\.ToDecimal\(lineArray\[155\]\)\)\); command\.Parameters\.Add\(new SqlParameter\("@ShipmentAmountOrder", Convert\.ToDecimal\(lineArray\[156\]\)\)\); command\.Parameters\.Add\(new SqlParameter\("@ShipmentAmountWeight", Convert\.ToDecimal\(lineArray\[157\]\)\)\); command\.ExecuteNonQuery\(\); } transaction\.Commit\(\); sr\.Close\(\); } catch { transaction\.Rollback\(\); throw; } } } catch \(Exception exception\) { MessageBox\.Show\(exception\.Message, "データベース接続エラー", MessageBoxButtons\.OK, MessageBoxIcon\.Error\); throw; } finally { connection\.Close\(\); } } }

SQL

--ストアド ALTER PROCEDURE \[dbo\]\.\[import\] \( @CreateDate nvarchar\(19\) ,@OrderCode nvarchar\(13\) ,@DealNumber decimal\(10\) ,@DealCode nvarchar\(13\) ,@LastDeliveryDate nvarchar\(8\) ,@DetailNumber decimal\(4\) ,@OriginalUnitPrice decimal\(10, 2\) ,@SalesUnitPrice decimal\(10\) ,@ShipmentInduvidualAmount decimal\(7, 1\) ,@ShipmentAmountOrder decimal\(6\) ,@ShipmentAmountWeight decimal\(10, 3\) \) AS BEGIN SET NOCOUNT ON; INSERT INTO dataimport VALUES\( @CreateDate ,@OrderCode ,@DealNumber ,@DealCode ,@LastDeliveryDate ,@DetailNumber ,@OriginalUnitPrice ,@SalesUnitPrice ,@ShipmentInduvidualAmount ,@ShipmentAmountOrder ,@ShipmentAmountWeight \) END

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

yuba
yuba

2017/01/18 18:04

エラーとはどんなエラーでしょう。
musix55
musix55

2017/01/18 22:12

何度も修正しているのでいくつかあるのですが、よく出ていたのは「プロシージャまたは関数の引数が多すぎます。」「入力文字列の形式が正しくありません」でした。引数の数や順序、型などが違っていないかは確認しています。
katsuya141
katsuya141

2017/01/19 00:38

command\.ExecuteNonQuery\(\);の行で出ているエラーかどうかは確認されていますか?
musix55
musix55

2017/01/19 03:35

ブレークポイントを設定しても、catchされるまでそのまま進んでしまいます。→自己解決しました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。