- PR -

ADO.NETのSqlDataAdapterとDataSet ASP.NETのDataGrid

1
投稿者投稿内容
よっしー
会議室デビュー日: 2002/08/02
投稿数: 7
投稿日時: 2002-08-02 11:10
はじめまして!!
私も最近は「.NET」に夢中で勉強しています。
特に、ASP.NETに興味を持ちまして 次なる受注の物件は
C# + ASP.NEt + ADO.NETで設計しようとサンプルを作ってるのですが・・・
行き詰まってしまいました。

今作ってるのは、ADO.NETのSqlDataAdapterとDataSet ASP.NETのDataGrid
を使ってメモリー上のワークテーブルを使ってデータ追加・変更・削除を
行い、最終にSqlDataAdapterのUpdateで実際のテーブルに反映させるプロ
グラムを作ってるのですが・・・ いい所までは!!行ったが・・・

今の詰まってる所は、ページ上のテキストボックスの値をコマンドボタンを押下
されたタイミングでDataSetに追加し、DataGridにもデータを追加し表示する箇所
です。

以下のソースで●◆の場所で、
「System.NullReferenceException: オブジェクト参照がオブジェクト インスタンス
に設定されていません」のエラーが発生

---------------------------------------------------------------------------------------
public SqlConnection cn = new SqlConnection();
public SqlDataAdapter adapter_shain;
public DataSet dataset_shain = new DataSet();
//フォームがロードされた時に実行
private void BindDataGrid(){
String strSQL = "SELECT * FROM 社員情報";
cn.ConnectionString = "server=sv;uid=sa;pwd=;database=sample";
cn.Open();
adapter_shain = new SqlDataAdapter(strSQL, cn);

String strsql;
strsql = "INSERT INTO 社員情報 (社員番号) VALUES (@Syaincd)";
adapter_shain.InsertCommand = new SqlCommand(strsql, cn);

SqlParameter workParam = null;

//社員番号
workParam = adapter_shain.InsertCommand.Parameters.Add(new SqlParameter("@Syaincd", SqlDbType.VarChar));
workParam.SourceColumn = "社員番号";
workParam.SourceVersion = DataRowVersion.Current;

adapter_shain.Fill(dataset_shain,"ad社員情報");

dgrdCustomers.DataSource = dataset_shain;
dgrdCustomers.DataBind();
}

// 更新ボタンを押下された
private void Update_click(object sender, EventArgs e)
{
DataRow newRow = dataset_shain.Tables["ad社員情報"].NewRow();
●◆ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ← ここでエラー
newRow["社員番号"] = "01076";
dataset_shain.Tables["ad社員情報"].Rows.Add(newRow);

// adapter_shain.Update(dataset_shain,"ad社員情報");

dgrdCustomers.DataSource = dataset_shain;
dgrdCustomers.DataBind();
}

---------------------------------------------------------------------------------------
多分、qlDataAdapterとDataSetのインスタンスする場所・方法が怪しいのですが、
そこから2日間も止まってます。
いろいろ調べたんですけど、この手のサンプルが無くて お手上げ状態
でも、今回のDataSetとSqlDataAdapterはWEBではかなりの武器にはなりそうなんで
まずは、ADO.NETを勉強して、ASP.NET C#の順に極めて行こうかなって思ってます。

私の会社では、まだまだ.NETとは??という状態で、私が率先して勉強中ですけど
本当にこの技術を使っての提案を許してくれるのかと心配です。
この時期の開発には多大なるリスクが伴うと思うが、頑張って行こう〜
WEIWEI
常連さん
会議室デビュー日: 2002/07/16
投稿数: 26
投稿日時: 2002-08-02 12:13
//社員番号
workParam = adapter_shain.InsertCommand.Parameters.Add(new SqlParameter("@Syaincd", SqlDbType.VarChar));
workParam.SourceColumn = "社員番号";
の部分で、SqlDbType.VarCharの配列数がないためかな?

一度
workParam = adapter_shain.InsertCommand.Parameters.Add(new SqlParameter("@Syaincd", SqlDbType.VarChar, 5));
のように変えて試してみてください。
違っていたらすみません。
よっしー
会議室デビュー日: 2002/08/02
投稿数: 7
投稿日時: 2002-08-02 15:45
早速の書き込み ありがとうございます。

しかし、Update_click()の構文をBindDataGrid()の中に入れて実行すると上手く
いきます。多分、dataset_shainのスコープの問題か??オブジェクトが破棄されている
のかな??

うぅーん 分からない!!
WEIWEI
常連さん
会議室デビュー日: 2002/07/16
投稿数: 26
投稿日時: 2002-08-02 21:44
>しかし、Update_click()の構文をBindDataGrid()の中に入れて実行すると上手くいきます。

だとすると、ポストバック後のレンダリングがうまくいってないってことかもしれません。

もしかして、ロード時のコードが
if (!IsPostBack) BindDataGrid();
となってません?

もしそうなら、ポストバック後も実行するようにif文をはずしてみてください。
BindDataGrid();

はずしてたら、すみません。
1

スキルアップ/キャリアアップ(JOB@IT)