【问题标题】:how to execute sql select statement in c#如何在c#中执行sql select语句
【发布时间】:2012-11-14 01:10:35
【问题描述】:

这里有个小问题: 我有一个组合框,它从数据库中的列中获取它的值,我用它来将数据输入回数据库中的另一个地方 喜欢

comboBox2.DataSource = ds1.Tables[0];
comboBox2.DisplayMember = "DoctorName";
comboBox2.ValueMember = "DoctorCode";
comboBox2.BindingContext = this.BindingContext;

这用医生的名字填充组合框,值将是医生的代码 那么

 SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=c:\users\administrator\documents\visual studio 2010\Projects\Clinic\Clinic\Clinc.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
        con.Open();
        SqlCommand cmd1 = new SqlCommand("SELECT   Doctors.DoctorCode, Doctors.DoctorName, SessionReservations.SessionCode, SessionReservations.PatientCode, SessionReservations.ExaminationCode, SessionReservations.DoctorCode AS Expr1, SessionReservations.SessionMonth, SessionReservations.SessionYear   FROM  Doctors INNER JOIN   SessionReservations ON Doctors.DoctorCode = SessionReservations.DoctorCode    WHERE  (Doctors.DoctorCode = @DoctorCode) AND (SessionReservations.SessionMonth = @month) AND (SessionReservations.SessionYear = @year)", con);
        SqlDataAdapter da2 = new SqlDataAdapter(cmd1);
        DataSet ds2 = new DataSet();

        try
        {

            da2.InsertCommand.Parameters.Add("@DoctorCode", SqlDbType.Int).Value = Convert.ToInt32(comboBox2.SelectedValue);
            da2.InsertCommand.Parameters.Add("@month", SqlDbType.Int).Value = comboBox1.SelectedValue;
            da2.InsertCommand.Parameters.Add("@year", SqlDbType.Int).Value = textBox2.Text;

            da2.Fill(ds2);
            cmd1.ExecuteReader();
            con.Close();
}

此代码用于选择特定行,并且 select 语句在 sql manager 中正常工作 但是在运行时它会给出错误

"System.NullReferenceException: 对象引用未设置为 对象的实例。在 Clinic.DoctorMoneyCall.button1_Click(Object sender, EventArgs e) in C:\Users\Administrator\documents\visual studio 2010\Projects\Clinic\Clinic\DoctorMoneyCall.cs:45 行

我只是不明白出了什么问题

【问题讨论】:

  • @fenonoga - 这只是一个空引用问题。这不是运行 SQL 查询所独有的。
  • 尝试调试,看看你的复选框和文本框是否有任何值可以作为参数传递
  • @MarcGravell 第 45 行是它添加医生代码的地方 da2.InsertCommand.Parameters.Add("@Doc​​torCode", SqlDbType.Int).Value = Convert.ToInt32(comboBox2.SelectedValue);跨度>

标签: c# sql sql-server database select


【解决方案1】:

您似乎正在尝试运行选择命令,但您正在将参数添加到插入命令。

        da2.SelectCommand.Parameters.Add("@DoctorCode", SqlDbType.Int).Value = Convert.ToInt32(comboBox2.SelectedValue);
        da2.SelectCommand.Parameters.Add("@month", SqlDbType.Int).Value = comboBox1.SelectedValue;
        da2.SelectCommand.Parameters.Add("@year", SqlDbType.Int).Value = textBox2.Text;

【讨论】:

  • 是的,我每次都想选择不同的东西,所以我必须在查询语句中创建变量
  • 但您将它们添加到插入命令,而不是选择命令。 SQL 命令有 4 种状态:选择、更新、插入、删除。它来自您可以运行的 SQL 查询。我将您的“insertcommand”更改为“selectCommand”
  • 天哪,非常感谢,我真的很愚蠢,我想了好几天才知道错误在哪里,非常愚蠢的事情,我必须再次多加注意谢谢
  • 没有问题!它通常很简单。我最近也发生了。
【解决方案2】:

错误消息表示您使用的对象之一为空。 con 对象是否正确初始化?

【讨论】:

  • 是的,连接工作正常,我已经在标签中显示了我的文本框和组合框的值,以确保它们正常工作并且确实如此
【解决方案3】:

您似乎在该文档的第 45 行传递了一个为 null 的变量。确保所有值都不为空。

【讨论】:

  • 这没有多大意义。他传递的内容不可能是null,因为它是表单上存在的控件的内容,并且这两个值都有默认值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2019-03-13
相关资源
最近更新 更多