我正在尝试将adminID(foriegn key)与我的表Media相关联。我检索adminID,但当我将其转换为int时,它会抛出异常“输入字符串的格式不正确”。
void Insert(string name, int size, string path)
{
SqlConnection connec = new SqlConnection(ConfigurationManager.ConnectionStrings["BloodDonorRegistrationConnectionString"].ConnectionString);
string VidInsertQuary = "insert into Media(AdminID,Date,Time,Content,FileName,FilePath,TopicTittle,TopicDescr) values (@ad,@dt,@tm,@cc,@Fname,@Fpath,@TpTittle,@TpDes)";
string AdminID = "select AdminID from Admin where Email='" + Session["UserID"]+"'";
try
{
int tempid = 0;
SqlCommand com2 = new SqlCommand(AdminID, connec);
tempid = Convert.ToInt32(com2.ToString());
SqlCommand com = new SqlCommand(VidInsertQuary, connec);
connec.Open();
com2.Parameters.AddWithValue("@ad",tempid);
com.Parameters.AddWithValue("@dt", DateTime.Now.Date);
com.Parameters.AddWithValue("@tm", DateTime.Now.TimeOfDay);
com.Parameters.AddWithValue("@cc", size);
com.Parameters.AddWithValue("@Fname", name);
com.Parameters.AddWithValue("@Fpath", path);
com.Parameters.AddWithValue("@TpTittle",TextBoxTittle.Text);
com.Parameters.AddWithValue("@TpDes",TextBoxDescription.Text);
com.ExecuteNonQuery();
Response.Redirect("AdminVideoUpload.aspx");
}
catch (Exception ex)
{
string exp = "Problem occured";
Response.Write(exp + ex.ToString());
}
finally
{
connec.Close();
}
}
答案 0 :(得分:3)
z = ZeroDate.new()
b = Date.new(2001,2,3)
b < z #=> false
b == z #=> false
b > z #=> true
z < b #=> true
z == b #=> false
z > b #=> false
与查询结果无关,也不是数字。
您需要com2.ToString()
,它将执行查询并返回结果的第一个单元格。
答案 1 :(得分:2)
这里
SqlCommand com2 = new SqlCommand(AdminID, connec);
你已经定义了一个sql命令。你还没有要求它执行。
所以这里没有任何结果可以将其转换为int
:
tempid = Convert.ToInt32(com2.ToString());
实际上,com2.ToString()
将返回类型为com2
的{{1}}对象的字符串表示形式。
为了解决问题,你可以试试这个:
SqlCommand
或者这个:
tempid = Convert.ToInt32(com2.ExecuteScalar());
我之前做过这个,当我尝试这个例外时出现了.. “System.Data.SqlClient.SqlException(0x80131904):必须声明 标量变量“@ad”。“
这是您的代码中的另一个问题,它与上述内容无关。 实际上,这个
tempid = (Int32)com2.ExecuteScalar();
应该改写为:
com2.Parameters.AddWithValue("@ad",tempid);
com.Parameters.AddWithValue("@ad",tempid);
不是参数化的sql查询。不是它并不意味着它不应该。您应该声明oly paramterized查询,以避免sql注入的危险。