私は約3-4ヶ月間C#をコーディングしていると言って始めましょう。WPFを使用してAccess MDBファイルに接続する(ConnectionStringプロパティが初期化されていない)
私は、Visual Studio内でどのようにデータベースにアクセスしてデータを挿入、更新、削除できるのかを基本的に理解しようとしています。私はさまざまなテストを試みましたが、私はOleDbがあまり好きではないWPFについて何かがあるという結論に達したと思います。 2つの同一のプロジェクトを作成しました.1つはWindowsフォームを使用し、もう1つはWPFを使用します。 Windowsは、プロジェクトのバージョンは
私はこの問題を解決する方法が分からないしかし、WPFのプロジェクトは、私にエラー
を与える「のConnectionStringプロパティが初期化されていない」しません絶対に正常に動作しますフォーム。私は12時間の最高の部分のためにインターネットを精練していましたが、まだ全く成功しませんでした。
ここにWPFファイルのオリジナルコードがあります。これはWindowsのフォームコードと同じです
public partial class MainWindow : Window
{
OleDbCommand cmd = new OleDbCommand();
OleDbConnection cn = new OleDbConnection();
OleDbDataReader dr;
public MainWindow()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
cn.ConnectionString = @"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Users\MarkB\Documents\testing.mdb";
cmd.Connection = cn;
loaddata();
}
private void loaddata()
{
listBox1.Items.Clear();
listBox2.Items.Clear();
listBox3.Items.Clear();
listBox4.Items.Clear();
try
{
string q = "select * from info";
cmd.CommandText = q;
cn.Open();
dr = cmd.ExecuteReader();
if(dr.HasRows)
{
while(dr.Read())
{
listBox1.Items.Add(dr[0].ToString());
listBox2.Items.Add(dr[1].ToString());
listBox3.Items.Add(dr[2].ToString());
listBox4.Items.Add(dr[3].ToString());
}
}
dr.Close();
cn.Close();
}
catch(Exception e)
{
cn.Close();
MessageBox.Show(e.Message.ToString());
}
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
ListBox l = sender as ListBox;
if(l.SelectedIndex != -1)
{
listBox1.SelectedIndex = l.SelectedIndex;
listBox2.SelectedIndex = l.SelectedIndex;
listBox3.SelectedIndex = l.SelectedIndex;
listBox4.SelectedIndex = l.SelectedIndex;
}
}
private void button1_Click(object sender, EventArgs e)
{
if ((textBox1.Text!="") && (textBox2.Text!=""))
{
string q ="insert into info (firstname,surname,address) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text +"')";
dosomething(q);
textBox1.Text = null;
textBox2.Text = null;
textBox3.Text = null;
}
}
private void dosomething(String q)
{
try
{
cn.Open();
cmd.CommandText = q;
cmd.ExecuteNonQuery();
MessageBox.Show("Data Saved");
cn.Close();
loaddata();
}
catch (Exception e)
{
cn.Close();
MessageBox.Show(e.Message.ToString());
}
}
private void button2_Click(object sender, EventArgs e)
{
if(listBox1.SelectedIndex !=-1)
{
string q = "delete from info where id =" + listBox1.SelectedItem.ToString();
dosomething(q);
}
}
}
誰でも助けてくれれば幸いです。私は問題がコードの接続面から生じる必要があることを知っています
UIフレームワークはデータベースフレームワークとほとんど関係がありません。だからあなたの質問にそれらを混ぜる理由は? –
@LeiYang何らかの理由でUIを選択すると、データベースに接続できるコードが混乱するためです。あなた自身でテストし、シンプルなWPFとWindowsフォームアプリケーションを作成し、このコードをテストしてください。 1つは動作し(Windowsフォーム)、もう1つは失われます(WPF)。 私はプログラムを設計するときにWPFを使うことを好むので、この問題の最下部に行きたいと思っています。 –
WPFを使用しているのであれば、なぜあなたが混在しているのかわからないのですが、なぜ**バインディングとMVVM **を使用しないのですか? –