- PR -

ACCESS&ASP.NETログイン認証。

投稿者投稿内容
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-12-02 20:08
今日は

もし、データにnullを許可しているのなら、DR[1].ToString()・DR[2].ToString()の前にNullを除外する必要があります。
例えば、isDBNull等により。
又は、データベースにNullを許可しないにするとかの考慮が必要かと思います。
にしお
常連さん
会議室デビュー日: 2003/12/01
投稿数: 44
投稿日時: 2003-12-03 04:28
SelCmd.Parameters.Add("会員ID");
SelCmd.Parameters.Add("パスワード");
SelCmd.Parameters["会員ID"].Value=Text1.Text;
SelCmd.Parameters["パスワード"].Value=Text2.Text;
SelCmd.Connection.Open();
OleDbDataReader dr=SelCmd.ExecuteReader();
dr.Read();
if (dr.IsDBNull(37))
{
Label1.Visible=true;
}
else
{
Label2.Visible=true;
}
dr.Close();
SelCmd.Connection.Close();
いろいろと調べて、上記のようなプログラムをしたら、1行目の
SelCmd.Parameters.Add("会員ID");の段階で、
OleDbParameterCollection は、String オブジェクトではなく、non-null OleDbParameter 型オブジェクトのみ受け入れます。
というエラーが出てきます。データベースの方ではnull値は入力できない形になっています。
ヘルプを見ると
myDataAdapter.SelectCommand.Parameters.Add("@SerialNum", OleDbType.Integer).Value = 239;という記述ができているのに、私のものだと、.Valueというのが出てきません。その段階で間違いであることはわかるのですが…。
どうかお力をお貸しください。
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2003-12-03 08:43
引用:

にしおさんの書き込み (2003-12-03 04:28) より:
SelCmd.Parameters.Add("会員ID");
SelCmd.Parameters.Add("パスワード");


パラメータの型を決めるのに型がわからなくては……たとえばテキスト型として、

コード:
SelCmd.Parameters.Add(new OleDbParameter("会員ID", OleDbType.VarWChar));
SelCmd.Parameters.Add(new OleDbParameter("パスワード", OleDbType.VarWChar));

とか。
にしお
常連さん
会議室デビュー日: 2003/12/01
投稿数: 44
投稿日時: 2003-12-03 09:36
上記書き込みありがとうございます!
やってみたところ、OleDbDataReader dr=SelCmd.ExecuteReader();の部分で、
パラメータ ?_2 にはデフォルト値はありません。
というエラーが出ます…。
デフォルト値は指定しなくてもよいのでは?
申し訳ありませんが、ヒントをいただけないでしょうか?
よろしくお願いいたします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2003-12-03 10:27
こんにちは
Loginテーブルからデータを取得する際
どのようなSELECT文を発行しているのですか?
にしお
常連さん
会議室デビュー日: 2003/12/01
投稿数: 44
投稿日時: 2003-12-03 12:42
もう一度、Select文を入力しなおしたところ完結いたしました。
見えないところで空欄や、半角、全角が間違っていたのかもしれません。
そして最後の質問なのですが、(dr.IsDBNull(Ordinal))のOrdinalの部分には列の順序番号が入るようなのですが、よくわかりません。
列の順序番号とはどういったものなのでしょうか…。

パスワードとIDが適合したときは正しく処理が行われるのですが、適合しなかった場合、行および列にデータが存在しません。
というエラーが出ます。
恐らくこのカッコ内のものが引っかかってるだと思います。
何回も質問して申し訳ありませんが、教えていただけないでしょうか?
よろしくお願いいたします。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-12-03 13:54
今日は

dr.IsDBNull(Ordinal)のOridinalは項目の順番に付けられた番号でIntegerだったと思います。
又、dr.GetOrdinal("項目名")でもそのOridinalと同じ順序番号Integerを返してくれます。
よってdr.IsDBNull(dr.GetOrdinal("項目名"))でも同じ様に動作します。
にしお
常連さん
会議室デビュー日: 2003/12/01
投稿数: 44
投稿日時: 2003-12-03 17:06
rvmx様、返信ありがとうございます。
私の場合、
SelCmd.Parameters.Add("会員ID");
SelCmd.Parameters.Add("パスワード");
SelCmd.Parameters["会員ID"].Value=Text1.Text;
SelCmd.Parameters["パスワード"].Value=Text2.Text;
SelCmd.Connection.Open();
OleDbDataReader dr=SelCmd.ExecuteReader();
dr.Read();
if (dr.IsDBNull(*)
という形で、Parameterに会員IDとパスワードを与え、そのSELECT文をExecuteReader();という形で一行ずつ読み込んでいくという形をとっているのですが、
dr.IsDBNullの部分では、dr.GetOrdinal("項目名")という項目名のところに、2つ(会員IDとパスワード)指定しないといけないという捉え方でよろしいのですよね?

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