トップ回答者
VC#でプログラミングしています。次のエラーについて教えてください。エラー NullReferenceExecptionはハンドルされませんでした。

質問
-
以上のようなFormを作成し次のようにコードを書きました。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;namespace dbtest01
{
public partial class Form1 : Form
{
private SqlDataAdapter DataAdapter;private bool ConnectedValue;
private bool Connected
{
get { return ConnectedValue; }
set
{
ConnectedValue = value;
buttonConnect.Enabled = !value;
buttonDisconnect.Enabled = value;
buttonSubmit.Enabled = value;
buttonReload.Enabled = value;
}
}public Form1()
{
InitializeComponent();
}private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = bindingSource1;
Connected = false;
}private void buttonConnect_Click(object sender, EventArgs e)
{
string connectString =
"Integrated Security=SSPI;" +
"Initial Catalog=Test1;" +
@"Data Source=localhost\sqlexpress";
string selectString = "select * from Table1";try
{
SqlDataAdapter dataAdaoter = new SqlDataAdapter(
selectString, connectString);
SqlCommandBuilder commandBuilder =
new SqlCommandBuilder(DataAdapter);
DataTable dataTeble = new DataTable();
dataAdaoter.Fill(dataTeble);
bindingSource1.DataSource = dataTeble;
Connected = true;
}catch(Exception ex)
{
MessageBox.Show(ex.Message, "エラー");
}
}private void buttonDisconnect_Click(object sender, EventArgs e)
{
bindingSource1.DataSource = null;
DataAdapter.Dispose();
dataGridView1.Update();
Connected = false;
}private void buttonSubmit_Click(object sender, EventArgs e)
{
DataAdapter.Update((DataTable)
bindingSource1.DataSource);
}private void buttonReload_Click(object sender, EventArgs e)
{
buttonDisconnect_Click(sender, e);
buttonConnect_Click(sender, e);
}
}
}実行すると、「接続」ボタンでデータベースを読み込むことが成功します
データグリッドでデータを書き「提出」ボタンを押してデータベースにデータを書くようにすると
private void buttonSubmit_Click(object sender, EventArgs e)
{
DataAdapter.Update((DataTable)
bindingSource1.DataSource);
}上記のDataAdapterのところで止まり
このようなエラーになります。
このエラーの意味が解らなくて先に進めません
ご教授お願いします。
- 移動 立花楓Microsoft employee, Moderator 2017年1月30日 4:31 Microsoft Azure Platform > Azure
回答
-
DataAdapter が初期化されて無くて null になっているからでしょう。
【追伸】
コードをざっと見てみましたが、他にも問題になりそうなところがありそうです。
Windows Forms で DataGridView を使って SQL Server データベースの表示・編集を行うアプリを作っているようですが、一度 Visual Studio のウィザードを使って定番の構成のアプリを作ってみてはいかがでしょう?
以下のチュートリアル、
チュートリアル : データベースへのデータの保存 (単一テーブル)
https://msdn.microsoft.com/ja-jp/library/0f92s97z(v=vs.120).aspx
10 行でズバリ !! 非接続型のデータ アクセス (ADO.NET) (C#)
https://code.msdn.microsoft.com/windowsdesktop/10-ADONET-C-cbfe7688
・・・のように Visual Studio のデータソース構成ウィザードを利用して型付 DataSet + TableAdapter を作って、それを利用してアプリを作ると、以下のページの図のような構造のアプリが、ほとんど自分でコードを書くこと無しに作れます。
Windows フォーム アプリケーションでのデータへの接続
https://msdn.microsoft.com/ja-jp/library/wxt2cwcc(v=vs.120).aspx操作に慣れると 10 分もかからず作れるはずです。今回のような問題に悩むことはなくなり、開発工数は激減するはずです。保守工数も減るはずです。
勉強のため自力でコードを書きたいということなのかもしれませんが、もしそうであっても、ウィザードが自動生成するコードを見れば参考になると思います。
お試しください。
- 編集済み SurferOnWww 2017年1月28日 5:28 追伸追加&誤記訂正
- 回答としてマーク よちわん 2017年1月31日 5:15
-
このエラーの意味が解らなくて先に進めません
C#はオブジェクト指向の言語です。オブジェクト指向において、クラス、インスタンスをきちんと理解することは基本中の基本になります。オブジェクトへの参照というのも基本的な考え方になります。
NullReferenceExceptionというのは、オブジェクトへの参照(Reference)が存在しない(Null)ので、例外(Exception)が発生したということです。
以下などが参考になると思いますので、以上のことをきちんと学ぶことを強くお勧めします。この先、プログラミングを進めるにあたり、必須の知識になります。そして、今回のエラーがなぜ発生したのかを十分に会得されて下さい。
オブジェクト、クラス、インスタンスの言葉の意味
http://dobon.net/vb/dotnet/beginner/classinstance.html第3章 クラスとインスタンス (1/3)
http://www.atmarkit.co.jp/ait/articles/0209/04/news001.html第3回 クラスとオブジェクト
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_003/csharp_abc02.htmlクラス
http://ufcpp.net/study/csharp/oo_class.html(追記)
ご質問者さまへ。このスレッドはAzureのカテゴリーが適切でないと思われますので、後に他のカテゴリーに移動される予定です。問題があればご指摘下さい。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiyaModerator 2017年1月28日 9:41 追記
- 回答としてマーク よちわん 2017年1月31日 5:15
-
よちわん さん、こんにちは。
フォーラム オペレーターの立花楓です。今回、「Azure」フォーラムに投稿いただいた内容を、「Visual C#」フォーラムに移動させていただきました。
trapemiya さんアドバイスをありがとうございます。
参考になる情報がありましたら、投稿者からの [回答としてマーク] をお願いします。
MSDN/TechNet Community Support 立花楓
- 編集済み 立花楓Microsoft employee, Moderator 2017年1月30日 4:32
- 回答としてマーク よちわん 2017年1月31日 5:15
すべての返信
-
DataAdapter が初期化されて無くて null になっているからでしょう。
【追伸】
コードをざっと見てみましたが、他にも問題になりそうなところがありそうです。
Windows Forms で DataGridView を使って SQL Server データベースの表示・編集を行うアプリを作っているようですが、一度 Visual Studio のウィザードを使って定番の構成のアプリを作ってみてはいかがでしょう?
以下のチュートリアル、
チュートリアル : データベースへのデータの保存 (単一テーブル)
https://msdn.microsoft.com/ja-jp/library/0f92s97z(v=vs.120).aspx
10 行でズバリ !! 非接続型のデータ アクセス (ADO.NET) (C#)
https://code.msdn.microsoft.com/windowsdesktop/10-ADONET-C-cbfe7688
・・・のように Visual Studio のデータソース構成ウィザードを利用して型付 DataSet + TableAdapter を作って、それを利用してアプリを作ると、以下のページの図のような構造のアプリが、ほとんど自分でコードを書くこと無しに作れます。
Windows フォーム アプリケーションでのデータへの接続
https://msdn.microsoft.com/ja-jp/library/wxt2cwcc(v=vs.120).aspx操作に慣れると 10 分もかからず作れるはずです。今回のような問題に悩むことはなくなり、開発工数は激減するはずです。保守工数も減るはずです。
勉強のため自力でコードを書きたいということなのかもしれませんが、もしそうであっても、ウィザードが自動生成するコードを見れば参考になると思います。
お試しください。
- 編集済み SurferOnWww 2017年1月28日 5:28 追伸追加&誤記訂正
- 回答としてマーク よちわん 2017年1月31日 5:15
-
このエラーの意味が解らなくて先に進めません
C#はオブジェクト指向の言語です。オブジェクト指向において、クラス、インスタンスをきちんと理解することは基本中の基本になります。オブジェクトへの参照というのも基本的な考え方になります。
NullReferenceExceptionというのは、オブジェクトへの参照(Reference)が存在しない(Null)ので、例外(Exception)が発生したということです。
以下などが参考になると思いますので、以上のことをきちんと学ぶことを強くお勧めします。この先、プログラミングを進めるにあたり、必須の知識になります。そして、今回のエラーがなぜ発生したのかを十分に会得されて下さい。
オブジェクト、クラス、インスタンスの言葉の意味
http://dobon.net/vb/dotnet/beginner/classinstance.html第3章 クラスとインスタンス (1/3)
http://www.atmarkit.co.jp/ait/articles/0209/04/news001.html第3回 クラスとオブジェクト
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_003/csharp_abc02.htmlクラス
http://ufcpp.net/study/csharp/oo_class.html(追記)
ご質問者さまへ。このスレッドはAzureのカテゴリーが適切でないと思われますので、後に他のカテゴリーに移動される予定です。問題があればご指摘下さい。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiyaModerator 2017年1月28日 9:41 追記
- 回答としてマーク よちわん 2017年1月31日 5:15
-
よちわん さん、こんにちは。
フォーラム オペレーターの立花楓です。今回、「Azure」フォーラムに投稿いただいた内容を、「Visual C#」フォーラムに移動させていただきました。
trapemiya さんアドバイスをありがとうございます。
参考になる情報がありましたら、投稿者からの [回答としてマーク] をお願いします。
MSDN/TechNet Community Support 立花楓
- 編集済み 立花楓Microsoft employee, Moderator 2017年1月30日 4:32
- 回答としてマーク よちわん 2017年1月31日 5:15