异常“输入字符串的格式不正确”

时间:2015-05-05 20:07:06

标签: c# sql asp.net

我正在尝试将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();
    }
}

2 个答案:

答案 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注入的危险。