插入文件时出错“列名称或提供的值的数量与表定义不匹配”请帮忙 [英] Error when inserting file "Column name or number of supplied values does not match table definition" please help

查看:118
本文介绍了插入文件时出错“列名称或提供的值的数量与表定义不匹配”请帮忙的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  private   void  Button1_Click(对象发​​件人,EventArgs e)
{
OpenFileDialog openFileDlg = new OpenFileDialog();
openFileDlg.InitialDirectory = Directory.GetCurrentDirectory();
if (openFileDlg.ShowDialog()== DialogResult.OK)
{
FileInfo fi = new FileInfo(openFileDlg.FileName);
FileStream fs = new FileStream(fi.FullName,FileMode.Open,FileAccess.Read);
BinaryReader rdr = new BinaryReader(fs);
byte [] fileData = rdr.ReadBytes(( int )fs.Length);
rdr.Close();
fs.Close();

string cs = @ Data Source = .\SQLEXPRESS; AttachDbFilename = | DataDirectory | \ SATDB.mdf; Integrated Security = True; User Instance = True;
使用(SqlConnection con = new SqlConnection(cs))
{
con.Open();
string sql = 插入SAT VALUES (@Trial_Addmission,默认);
SqlCommand cmd = new SqlCommand(sql,con);
cmd.Parameters.Add( @ Trial_Addmission,SqlDbType.VarBinary,fileData.Length ).Value = fileData;
cmd.ExecuteNonQuery();
con.Close();
}
}

}

解决方案

可能还有其他字段比你想要插入的那些你没有指定的那些。但很可能是你试图设置比实际更多的列...



它可能是一个ID字段,你已设置为Identity,或者它可能是一个非空字段。无论哪种方式,你都不能这样插入。

当你插入时总是命名你的字段:

  string  sql =   INSERT INTO SAT(TrialColumn,DefaultColumn)VALUES(@Trial_Addmission,default) ; 

这将消除身份字段的任何问题,但您可能需要检查默认值的数据类型,因为我不确定默认这个词是否有效那里! :laugh:


在您的SQL INSERT语句中,您不仅仅指定字段名称。



替换ColumnName1和ColumnName2,其中列名为SQL,其中包含@Trial_Addmission和默认值。

  string  sql =   INSERT INTO SAT(ColumnName1,ColumnName2)VALUES(@Trial_Addmission,default); 


private void Button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDlg = new OpenFileDialog();
            openFileDlg.InitialDirectory = Directory.GetCurrentDirectory();
            if (openFileDlg.ShowDialog() == DialogResult.OK)
            {
                FileInfo fi = new FileInfo(openFileDlg.FileName);
                FileStream fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read);
                BinaryReader rdr = new BinaryReader(fs);
                byte[] fileData = rdr.ReadBytes((int)fs.Length);
                rdr.Close();
                fs.Close();

                string cs = @"Data            Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SATDB.mdf;Integrated Security=True;User Instance=True";
                using (SqlConnection con = new SqlConnection(cs))
                {
                    con.Open();
                    string sql = "INSERT INTO SAT VALUES (@Trial_Addmission, default)";
                    SqlCommand cmd = new SqlCommand(sql, con);
                    cmd.Parameters.Add("@Trial_Addmission", SqlDbType.VarBinary, fileData.Length).Value = fileData;
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
            }

        }

解决方案

Probably, there is a field other than the ones you are trying to insert that you haven't specified. But it may well be that your are trying to set more columns than you actually have...

It may be an ID field, that you have set to Identity, or it may be a not-null field. Either way, you can't insert like that.
Always name your field when you INSERT:

string sql = "INSERT INTO SAT (TrialColumn, DefaultColumn) VALUES (@Trial_Addmission, default)";

That will get rid of any problem with Identity fields, but you may need to check the datatype of your defaulted value, as I'm not sure the word "default" will work there! :laugh:


In your SQL INSERT statement you don't specify the field names only the values.

Replace ColumnName1 and ColumnName2 with column names in SQL where you are putting the @Trial_Addmission and default values.

string sql = "INSERT INTO SAT (ColumnName1,ColumnName2) VALUES (@Trial_Addmission, default)";


这篇关于插入文件时出错“列名称或提供的值的数量与表定义不匹配”请帮忙的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆