从表中检索id值,以便以后使用

本文关键字:检索 id | 更新日期: 2023-09-27 18:22:47

我正在尝试从表p_identity中检索值p_id(自动递增),以将其存储在表Communication中。似乎出现了这种错误

"错误:System.Data.SqlClient.SqlException(0x80131904):转换转换nvarchar值"SELECT P_id FROM P_identity"时失败其中Amka="15598970695'"到数据类型int。"

我该如何解决?

try
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);
            conn.Open();
            string pat_id = "SELECT P_id FROM P_identity WHERE Amka  = '" + TextBoxAmka.Text + "'";
            SqlCommand com2 = new SqlCommand(pat_id, conn);
            com2.ExecuteNonQuery();
            Response.Write("");
            string insert_pacom = "insert into Communication (P_id,Address,Region,Town,TK,Mobile_number,Country,House_number,Email) values (@pa_id, @add, @nomos, @poli, @tk, @kinito, @xora, @oikia, @email) ";
            SqlCommand com = new SqlCommand(insert_pacom, conn);
            com.Parameters.AddWithValue("@pa_id", pat_id.ToString());
            com.Parameters.AddWithValue("@add", txtadd.Text);
            com.Parameters.AddWithValue("@nomos", txtnomos.Text);
            com.Parameters.AddWithValue("@poli", txttown.Text);
            com.Parameters.AddWithValue("@tk", txttk.Text);
            com.Parameters.AddWithValue("@xora", txtxora.Text);
            com.Parameters.AddWithValue("@kinito", txtkinito.Text);
            com.Parameters.AddWithValue("@oikia", txtoikia.Text);
            com.Parameters.AddWithValue("@email", txtemail.Text);

            com.ExecuteNonQuery();
            Response.Write("<script>alert('Τα στοιχεία αποθηκεύτηκαν επιτυχώς!')</script>");
            conn.Close();
        }
        catch (Exception ex)
        {
            Response.Write("Error :" + ex.ToString());
        }

从表中检索id值,以便以后使用

听起来你只需要从中删除单引号

WHERE Amka  = '" + TextBoxAmka.Text + "'"

部分作为

WHERE Amka  = " + TextBoxAmka.Text

其中CCD_ 1列看起来是一个数值。对于SELECT语句来说,使用ExecuteNonQuery似乎毫无意义。如果您想从语句中获得结果值,可以使用ExecuteReader

或者,如果SELECT语句只返回一个值,则可以使用完全适合这种情况的ExecuteScalar

int id = (int)com2.ExecuteScalar();

还有几件事;

  • SELECT语句使用参数化查询,就像对INSERT语句一样
  • 使用using语句自动处理连接和命令,而不是手动调用Amka0方法
  • 不要使用AddWithValue方法。它有时可能会产生意想不到的结果。使用Add方法重载来指定参数类型及其大小