在EF中使用Identity_Insert ON和insert命令

时间:2018-04-27 16:40:57

标签: asp.net

这是我的C#代码,我收到此错误

  

只有在使用列列表并且IDENTITY_INSERT为ON时,才能指定表'tblImages'中标识列的显式值。

public partial class _Default : System.Web.UI.Page
{
    // string strconn= ConfigurationManager.ConnectionStrings["con"].ConnectionString;
    SqlConnection conn=new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=E:\Final_Year_Project\ProjectFiles\ComSysForDeafAndDumb\App_Data\Database.mdf;Integrated Security=True");

    static string query="";
    static int myID = 989;
    static string imgName;
    static string imgSize;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            lblMessage.Visible = false;
            hyperlink.Visible = false;
        }
    }

    protected void btnUpload_Click(object sender, EventArgs e)
    {
       string b = "";
       FileUpload1.SaveAs(Request.PhysicalApplicationPath +"./images/"+ FileUpload1.FileName.ToString());
       b="~/images/"+ FileUpload1.FileName.ToString();        
       query = "insert into tblImages values ("+myID+",'"+imgName+"','"+imgSize+"','"+b+"','"+txtdes.Value+"')";

       SqlCommand cmd = new SqlCommand(query, conn);
       conn.Open();

       cmd.ExecuteNonQuery();
       conn.Close();

       Response.Write("successful");
       imgUpload.ImageUrl = b;
    }
}

1 个答案:

答案 0 :(得分:0)

执行此操作时:

insert into tblImages values (123, 'some value', 'another value')

数据库将提供的值直接映射到表中的列列表。但是您的某个列不允许显式插入值。特别是标识列,通常是表中的第一列,通常称为ID

不是尝试插入所有列,而是显式插入所需的列。我们不知道你的表的结构,但作为一个例子,INSERT命令看起来像这样:

insert into tblImages (ImageName, ImageSize) values ('some value', 'another value')

ImageNameImageSize是您的列的名称。展开它以包括要插入值的所有列,并包括您尝试为该记录插入的所有值。基本上,明确指定要写入哪些列,尝试写入标识列。

此外,这很重要,您的代码全开 SQL注入This question有一些很好的解释和如何解决这个问题的例子。基本上,您应始终将用户输入视为而不是SQL命令中的可执行代码