C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: ACCESSへの新規データの追加ができません。


(過去ログ 71 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■41346 / inTopicNo.1)  ACCESSへの新規データの追加ができません。
  
□投稿者/ 裕猫 (7回)-(2009/09/18(Fri) 10:21:57)

分類:[C#] 

タイトルどうりACCESSへの新規データの追加ができません。
下記のコードを書いたのですがACCESSへのデータ追加のところでエラーを起こし、接続失敗のメッセージが出ます。
やりたいことは("G:\\辞書メンテ\\統合辞書.dic")のテキストをG:\\DB\\英和辞書.mdbの辞書というテーブルに移したいだけです。
ACCESS辞書の中身は英単128BYTE、日本語256BYTEのテキスト2つの構成
("G:\\辞書メンテ\\統合辞書.dic")は1行ずつ英単語、日本語の交互構成になっています。(文字長はばらばらです。)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace DB変換
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            StreamReader tango = new StreamReader("G:\\辞書メンテ\\統合辞書.dic");
            System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection();
            cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data source= G:\\DB\\英和辞書.mdb";
            try
            {
                cn.Open();
                while (true)
                {
                    string Line = tango.ReadLine();
                    if (Line == null)
                    {
                        break;
                    }
                    label1.Text = Line;
                    Line = tango.ReadLine();
                    label2.Text = Line;
                    System.Data.OleDb.OleDbCommand com = new System.Data.OleDb.OleDbCommand(  ←
                        "INSERT INTO 辞書 VALUES(lavel1.Text, label2.Text)", cn);        | この3行でエラーが出ているのまでは突き止めました。
                    com.ExecuteNonQuery();                           ←
                }
            }
            catch (Exception)
            {
                MessageBox.Show("DB接続失敗", "ERROR");
            }
            cn.Close();
            tango.Close();
            this.Close();
        }
    }
}

上記3行をどう書き換えれば動くでしょう?おわかりの方教えてください。よろしくお願いいたします。
追記 ACCESSの接続は正常にできていました。

引用返信 編集キー/
■41349 / inTopicNo.2)  Re[1]: ACCESSへの新規データの追加ができません。
□投稿者/ gtk2k (80回)-(2009/09/18(Fri) 11:02:19)
接続失敗って、catchしたときのMessageBox.Show("DB接続失敗", "ERROR");
が実行されているということですよね。
そもそも、接続失敗をchatchするのであればcn.Open()のみcatchしないと。
このコードだと間違ったSQLを発行しても、"DB接続失敗"とメッセージが表示されてしまいます。

引用返信 編集キー/
■41351 / inTopicNo.3)  Re[2]: ACCESSへの新規データの追加ができません。
□投稿者/ 裕猫 (8回)-(2009/09/18(Fri) 11:35:38)
No41349 (gtk2k さん) に返信
> 接続失敗って、catchしたときのMessageBox.Show("DB接続失敗", "ERROR");
> が実行されているということですよね。
> そもそも、接続失敗をchatchするのであればcn.Open()のみcatchしないと。
> このコードだと間違ったSQLを発行しても、"DB接続失敗"とメッセージが表示されてしまいます。
>
そうですね。最初OPENに失敗したかと思って問題の3行を殺して実行してみたらすんなり動いたので、問題の3行が出したエラーをキャッチしてMessageBox.Show("DB接続失敗", "ERROR");が出ているんだなとわかりました。そこはあとで直そうと思っています。
引用返信 編集キー/
■41352 / inTopicNo.4)  Re[3]: ACCESSへの新規データの追加ができません。
□投稿者/ 裕猫 (9回)-(2009/09/18(Fri) 11:50:24)
No41349 (gtk2k さん) の返信にしたがい、下記のようにプログラムを変更しましたところ "1つ以上の必要なパラメータの値が設定されていません" というエラーの内容がわかりましたが、パラメータは全部設定していると思うのですが、何が設定されていないのかわかりません。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace DB変換
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            StreamReader tango = new StreamReader("G:\\辞書メンテ\\統合辞書.dic");
            System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection();
            cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data source= G:\\DB\\英和辞書.mdb";
            try
            {
                cn.Open();
            }
            catch (Exception)
            {
                MessageBox.Show("DB接続失敗", "ERROR");
            }
            while (true)
            {
                string Line = tango.ReadLine();
                if (Line == null)
                {
                    break;
                }
                label1.Text = Line;
                Line = tango.ReadLine();
                label2.Text = Line;
                try
                {
                    System.Data.OleDb.OleDbCommand com = new System.Data.OleDb.OleDbCommand(
                        "INSERT INTO 辞書 VALUES(lavel1.Text, label2.Text)", cn);
                    com.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            cn.Close();
            tango.Close();
            this.Close();
        }
    }
}


引用返信 編集キー/
■41353 / inTopicNo.5)  Re[3]: ACCESSへの新規データの追加ができません。
□投稿者/ すがり (83回)-(2009/09/18(Fri) 11:51:16)
"INSERT INTO 辞書 VALUES('" + lavel1.Text + "','" + label2.Text+ "')", cn);

じゃないですかね。
変数にしたほうがいいとは思いますけど。
引用返信 編集キー/
■41360 / inTopicNo.6)  Re[4]: ACCESSへの新規データの追加ができません。
□投稿者/ 裕猫 (10回)-(2009/09/18(Fri) 13:48:49)
No41353 すがりさん に返信
> "INSERT INTO 辞書 VALUES('" + lavel1.Text + "','" + label2.Text+ "')", cn);
>じゃないですかね。
>変数にしたほうがいいとは思いますけど。

動きました。'でかこむんですか!。知りませんでした。まだデータおかしくて全部うまく動きませんが、とりあえずできました。ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -