从表中检索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());
}
听起来你只需要从中删除单引号
WHERE Amka = '" + TextBoxAmka.Text + "'"
部分作为
WHERE Amka = " + TextBoxAmka.Text
其中CCD_ 1列看起来是一个数值。对于SELECT
语句来说,使用ExecuteNonQuery
似乎毫无意义。如果您想从语句中获得结果值,可以使用ExecuteReader
。
或者,如果SELECT
语句只返回一个值,则可以使用完全适合这种情况的ExecuteScalar
。
int id = (int)com2.ExecuteScalar();
还有几件事;
- 对
SELECT
语句使用参数化查询,就像对INSERT
语句一样 - 使用
using
语句自动处理连接和命令,而不是手动调用Amka
0方法 - 不要使用
AddWithValue
方法。它有时可能会产生意想不到的结果。使用Add
方法重载来指定参数类型及其大小