2

私はウェブサイトから予約機能をしていました。新しい予定を作成する前に日付と時刻を比較できます。同じ日付と時刻のユーザー キーがデータベースに存在する場合、メッセージ ボックスが表示されます。データベースとは異なる日付と時刻を挿入しようとすると、エラーが発生します。 エラー

この行でエラーが発生します:

string dtime = time.ExecuteScalar().ToString();

自分のコードの何が問題なのかわかりません。誰か指摘してもらえますか? ありがとう。これは私のコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Windows.Forms;
public partial class MakeAppointment : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
    string appointmentdate = Convert.ToString(DropDownListDay.Text + "-" + DropDownListMonth.Text + "-" + DropDownListYear.Text);
    string appointmenttime = Convert.ToString(DropDownListHour.Text + ":" + DropDownListMinute.Text + ":" + DropDownListSecond.Text + " " + DropDownListSession.Text);

    SqlConnection con = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True");
    con.Open();
    SqlCommand date = new SqlCommand("Select adate from customer_registration where adate='"+ appointmentdate +"'",con);
    string ddate = date.ExecuteScalar().ToString();
    con.Close();
    if (ddate == appointmentdate)
    {
        con.Open();
        SqlCommand time = new SqlCommand("Select atime from customer_registration where atime='"+ appointmenttime +"'", con);
        string dtime = time.ExecuteScalar().ToString();
        con.Close();

        if (dtime == appointmenttime)
        {
            MessageBox.Show("This appointment is not available. Please choose other date & time.");
        }
}
}
4

3 に答える 3

2

クエリに対してレコードが存在しない場合にExcuteScalar(); 返されるため、問題があるようです。null

このように使用できます

   var data= date.ExecuteScalar();
   if(data!=null)
         ddate =data.ToString();

詳細

ExecuteScalar が NullReferenceException をスローする

于 2013-01-06T12:18:34.873 に答える
1

これを試して

using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Windows.Forms;
using System;
public partial class MakeAppointment : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string appointmentdate = Convert.ToString(DropDownListDay.Text + "-" + DropDownListMonth.Text + "-" + DropDownListYear.Text);
        string appointmenttime = Convert.ToString(DropDownListHour.Text + ":" + DropDownListMinute.Text + ":" + DropDownListSecond.Text + " " + DropDownListSession.Text);

        using (SqlConnection con = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True"))
        {
            con.Open();
            SqlCommand date = new SqlCommand("Select adate from customer_registration where adate='" + appointmentdate + "'", con);
            string ddate = date.ExecuteScalar().ToString();
            if (ddate == appointmentdate)
            {
                SqlCommand time = new SqlCommand("Select atime from customer_registration where atime='" + appointmenttime + "'", con);
                var rtime = time.ExecuteScalar();
                if (rtime != null)
                {
                    string dtime = rtime.ToString();

                    if (dtime == appointmenttime)
                    {
                        MessageBox.Show("This appointment is not available. Please choose other date & time.");
                    }
                }
                else
                {
                    MessageBox.Show("Failed to fetch time from database");
                }
            }
            con.Close();
        }
    }
}
于 2013-01-06T12:10:21.760 に答える
0

問題は、ExecuteScalar への呼び出しが値を返さないときに時間変数が空であることです。ExecuteScalar メンバーを呼び出そうとする前に、時間変数が有効 (!= null) かどうかを確認してください。

于 2013-01-06T12:03:58.210 に答える