1

我正在尝试创建一个搜索按钮,当我在文本框中输入 ID 并按下它时,它会转到我的私有 SQL 服务器数据库并获取引用该 ID 的数据行,但是由于我的异常处理程序给我带来了错误错误的 CommandText .. 这是我的代码

private void SearchBtn_Click(object sender, EventArgs e)
{
   cn.ConnectionString = Properties.Settings.Default.ConStr;
   if (ID.Text == "")
   {
      MessageBox.Show("Please Enter The ID you would like to search");
   }
   else
   {
      SqlCommand com = new SqlCommand();
      cn.Open();
      SqlParameter user = new SqlParameter("@ID", SqlDbType.Int);
      SqlParameter FN = new SqlParameter("@First_Name",SqlDbType.NChar);
      SqlParameter LN = new SqlParameter("@Last_Name", SqlDbType.VarChar);
      SqlParameter Jb = new SqlParameter("@Job", SqlDbType.VarChar);
      SqlParameter Ag = new SqlParameter("@Age", SqlDbType.VarChar);
      SqlParameter ph = new SqlParameter("@Phone", SqlDbType.VarChar);
      com.Parameters.Add(user);
      com.Parameters.Add(FN);
      com.Parameters.Add(LN);
      com.Parameters.Add(Jb);
      com.Parameters.Add(Ag);
      com.Parameters.Add(ph);

      com.Connection = cn;

这是我的错误: *com.CommandText =“搜索(名字,姓氏,工作,年龄,电话)值('”+ FN +“','”+ LN +“','”+ Jb +“','” + Ag + "','" + ph + "' 来自 MyList) ";*

      user.Direction = ParameterDirection.Input;
      FN.Direction = ParameterDirection.Output;
      LN.Direction = ParameterDirection.Output;
      Jb.Direction = ParameterDirection.Output;
      Ag.Direction = ParameterDirection.Output;
      ph.Direction = ParameterDirection.Output;

      FN.Size = 10;
      LN.Size = 10;
      Jb.Size = 10;
      Ag.Size = 10;
      ph.Size = 10;

      user.Value = Convert.ToInt32(ID.Text);

      try
      {
         com.ExecuteNonQuery();

         FirstName.Text = FN.Value.ToString();
         LastName.Text = LN.Value.ToString();
         Job.Text = Jb.Value.ToString();
         Age.Text = Ag.Value.ToString();
         Phone.Text = ph.Value.ToString();
      }
      catch (Exception ex)
      {
         MessageBox.Show(ex.Message);
      }
      finally
      {
         cn.Close();
      }

我正在使用 Visual Studio 2012 。提前致谢 。

4

3 回答 3

2
"Search (First_Name,Last_Name,Job,Age,Phone) values('" + FN + "','" + LN + "','" + Jb+ "','" + Ag + "','" + ph + "' from MyList)"

看起来并不像 SQL。另外,我不太确定您为什么要设置大量未使用的参数。

也许你的意思是

com.CommandText = "SELECT First_Name, Last_Name, Job, Age, Phone FROM MyList WHERE ID=@Id";
com.Parameters.AddWithValue("@Id", ID.Text);

此外,如果这是您的意图,那ExecuteNonQuery是错误的,因为那是 for INSERTUPDATE以及其他不返回结果的事情。

于 2013-04-10T20:00:44.597 回答
1

命令文本应该像

com.CommandText = "SELECT First_Name, Last_Name, Job, Age, Phone FROM MyList WHERE ....";

删除大部分参数,只留下输入参数。

而不是com.ExecuteNonQuery()使用:SqlDataReader reader = command.ExecuteReader();并使用它读取您的数据。示例文章在这里

于 2013-04-10T20:05:09.617 回答
0

首先:

"Search (First_Name,Last_Name,Job,Age,Phone) values('" + FN + "','" + LN + "','" + Jb+ "','" + Ag + "','" + ph + "' from MyList)"

对我来说,这看起来不像是有效的 SQL。

我认为你正在寻找做这样的事情:

 using (SqlConnection myConnection = new SqlConnection(connString))
 {
    string oString = " SELECT  * from MyList WHERE (id = @id)";
    SqlCommand oCmd = new SqlCommand(oString, myConnection);
    oCmd.Parameters.Add(new SqlParameter("@id", ID.Text));

    myConnection.Open();
    string name="";
    string lastname ="";
    using (SqlDataReader oReader = oCmd.ExecuteReader())
    {
       while (oReader.Read())
       {
          name  = oReader["name"].ToString(); // replace "name" with the name of the column you want
          lastname = oReader["lastname"].ToString();
       }
    }
    myConnection.Close();
    return name + lastname;

您可以使用这些值来设置表单文本框中的文本:

YourNameTextbox.Text = name;

.. ETC

于 2013-04-10T20:05:27.780 回答