老大ID是递增的键就不要插值了,连空值都不要的
sqlConnection1.Open();
//sqlInsertCommand1.Parameters["@ID"].Value=DBNull.Value; //这行去掉
sqlInsertCommand1.Parameters["@filename"].Value="aaaaa.eee.wma";

解决方案 »

  1.   

    System.Data.SqlClient.SqlException: 被准备语句 '(@ID int,@filename varchar(50))INSERT INTO files(ID, filename) V' 需要参数 @ID,但未提供该参数。去掉了就是这个结果阿
      

  2.   

    我一个月前遇到楼主同样的问题,向楼主建议, sql和C#要严格分开,就是说,能用sql完成的就用sql,这样最好用存储过程,c#调用存储过程,层次分明,也便于修改.
    sql中递增字段是不用插值的
      

  3.   

    我想知道IDENTITY_INSERT是怎么回事
      

  4.   

    调存储过程和你直接传个strSql是一样的呀
      

  5.   

    没用SqlServer里给的自动编号,自己写的语句,一样的!zzxa (zzxa) 兄可以参考参考!
    {
    string maxid="0";
    string strconn="server=127.0.0.1;user id=sa;password=;database=luntan";
    conn=new SqlConnection(strconn);
    conn.Open();
    string strsql="select top 1 id from picture order by id desc";

    cmd=new SqlCommand(strsql,conn);
    SqlDataReader dr=cmd.ExecuteReader();
    if(dr.Read())
    {
    maxid=dr["id"].ToString();
    }

    dr.Close();
        cmd=new SqlCommand("sp_tu",conn);
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.Add("@id",SqlDbType.Int).Value=Convert.ToInt32(maxid)+1;
    cmd.Parameters.Add("@tudaxiao",SqlDbType.VarChar).Value=buffer.Length.ToString();
    cmd.Parameters.Add("@tupath",SqlDbType.VarChar).Value=file1.Value;
    cmd.Parameters.Add("@tumiaoshu",SqlDbType.VarChar).Value=TextBox1.Text;
    cmd.Parameters.Add("@tuname",SqlDbType.VarChar).Value=file1.Value;
    cmd.Parameters.Add("@tu",SqlDbType.Image).Value=buffer;
    cmd.ExecuteNonQuery();
    Response.Write("<script>alert('保存成功!"+maxid.ToString()+"');</script>");
    conn.Close();
    }
      

  6.   

    INSERT INTO files(ID, filename) //把里面的ID也去掉
    建议楼主不要用自动递增,最好再用一张表,可以存多个表的ID,有两个字段:ID_NAME和ID_VALUE,id_name存储主健名称,id_value存可用的最大值。用的时候先更新(把这个最大值+1),然后再取这个值!