名为“序列号”的列已属于此 DataTable!!!!!!

问题描述

求指教,代码如下!privatevoidsaveButton_Click(objectsender,EventArgse){stringstrExcelFileName=openFileDialog1.FileName;stringstrCon="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="+strExcelFileName+";ExtendedProperties=*Excel12.0;HDR=YES;IMEX=0*";stringstrCom="SELECT*FROM[Sheet1$]";OleDbConnectionmyConn=newOleDbConnection(strCon);myConn.Open();OleDbDataAdaptermyDataAdapter=newOleDbDataAdapter(strCom,myConn);DataSetmyDataSet=newDataSet();myDataAdapter.Fill(myDataSet,"[Sheet1$]");myConn.Close();DataTabledt=myDataSet.Tables[0];foreach(DataGridViewColumnheaderCellindataGridView1.Columns){dt.Columns.Add(headerCell.HeaderText);//名为“序列号”的列已属于此DataTable}foreach(DataGridViewRowitemindataGridView1.Rows){DataRowdr=dt.NewRow();for(inti=0;i<dt.Columns.Count;i++){dr[0]=item.Cells[i].Value.ToString();}dt.Rows.Add(dr);}

解决方案

解决方案二:
要new一个Columns.不能把别的表的列加入新表.
解决方案三:
add列之前,线查找是否已经存在同名的列,如果有,先删除,再添加(或者略过)
解决方案四:
dataGridView1.Columns中存在相同名称的列名
解决方案五:
DataTabledt=myDataSet.Tables[0];你已经把整个表都赋值给dt了,而且是将dt指向了myDataSet.Tables[0](dt是个引用类型),而不是将表结构或表数据copy给dt你应该重新new一个dt,再执行下面的代码.
解决方案六:
回答Z65443344:1.我new过一个,但是现实要求我指向一个实例,也就是新的dt没有指向实例,不能够运行。
解决方案七:
我也尝试过将sheet1改成了sheet2,我的理解是即是实例,也没有那个列,但是还是错的,错误是索引为负数。
解决方案八:
回答bdmh:请问如何判断?如何删除?语句是什么?代码是什么?
解决方案九:
引用5楼u011612713的回复:

回答Z65443344:1.我new过一个,但是现实要求我指向一个实例,也就是新的dt没有指向实例,不能够运行。

1.谁要求你指向一个实例??2.stringstrCom="SELECT*FROM[Sheet1$]";这个SQL语句只能查询Sheet1,你怎么可能把dt指向Sheet2??
解决方案十:
3.foreach(DataGridViewColumnheaderCellindataGridView1.Columns){dt.Columns.Add(headerCell.HeaderText);//名为“序列号”的列已属于此DataTable}这代码你先写个伪代码出来,然后再翻译成代码行吗?逻辑十分混乱dataGridView1是前台的表格,你要查询数据库然后填充这个表格,怎么又循环表格去填充后台数据源??这表格里有数据吗?
解决方案十一:
先写个伪代码,过程可以省略,业务逻辑要详细比如循环,就写循环,不要写什么定义个i或者j什么的这样才能方便人家看懂你到底想干什么从你的代码,根本看不出来你到底想干什么
解决方案十二:
回答xue529290400:我知道此datatable中已经存在这个列,所以不能够再添加。你的意思是让我在这个datatable中重新建一个列是吗?可是我想覆盖掉之前的列。
解决方案十三:
这个表格里有数据,我的逻辑是先打开一个excel显示在dataviewgrid中,之后再dataviewgrid中修改,再保存到之前的excel中。我之前有一个打开代码如下:privatevoidopenButton_Click(objectsender,EventArgse){//OpenFileDialogfile=newOpenFileDialog();openFileDialog1.ShowDialog();readData(openFileDialog1.FileName);}privatevoidreadData(stringstrExcelFileName){stringstrConn="Provider=Microsoft.Ace.OleDb.12.0;"+"datasource="+strExcelFileName+";ExtendedProperties='Excel12.0;HDR=Yes;IMEX=1'";stringstrCom="SELECT*FROM[Sheet1$]";OleDbConnectionmyConn=newOleDbConnection(strConn);myConn.Open();OleDbDataAdaptermyDataAdapter=newOleDbDataAdapter(strCom,strConn);DataSetmyDataSet=newDataSet();myDataAdapter.Fill(myDataSet,"sheet1");myConn.Close();dataGridView1.DataSource=myDataSet.Tables["sheet1"].DefaultView;}
解决方案十四:
DataTabledt=myDataSet.Tables[0].Clone克隆表DataTabledt=myDataSet.Tables[0].Copy拷贝表
解决方案十五:
你应该查的是如何打开一个excel(open),然后修改,然后保存(save)而不是再去重新读一次excel而且,如果你想获取dataGridView1的数据,用datatabledt=dataGridView1.DataSource就可以获取到了,不过不推荐这样用你不要dataGridView1.DataSource=myDataSet.Tables["sheet1"].DefaultView;这样直接赋值而是先把myDataSet.Tables["sheet1"].DefaultView放到一个全局的dt里操作完dataGridView1,回头直接去dt里取数据就行了.不要来回折腾数据源了
解决方案:
1.点击打开按钮,打开excel,建立连接,数据到dataset2.绑定dataviewgrid到dataset.table,将数据显示到dataviewgrid中3.修改dataviewgrid中数据,例如添加和修改(没有删除)4.点击保存,将数据保存至excel中,我第一次贴的代码就是保存的代码5.保存:先建立连接;将dataviewgrid中数据添加至新建表dt中,dt指向了一个实例,dataset的table【0】,这个dataset填充的是之前打开的excel的sheet1ps:我做过改动,将下面这句DataTabledt=myDataSet.Tables[0];//初始化DataTable实例改为了DataTabledt=newDataTable();出现的错误为:
解决方案:
你还是立即停止研究这个套路根本不对写入excel和读取excel完全不是一个套路你先研究研究如何导出到excel的代码,稍作修改,不新建,而是打开已有的excel,就行了或者新建也可以,然后导出,覆盖掉原有的excel,效果一样.你把导入的代码研究烂了,也实现不了导出的功能.
解决方案:
还有,未将对象引用到实例的错误,是某个变量为null了,跟dt是否指向某个实例一点关系都没有出现错误,你先调试出到底哪行出现错误好吗,不要瞎猜啊
解决方案:
myDataSet.Tables[0];已经有序列号这个列,你再添加自然重复。你读取的Sheet1$里面已有序列号列,如果看不到请显示隐藏列。
解决方案:
还有,趁着你还没研究透彻OLEDB到底怎么用,趁早改学NPOI吧用OLEDB问题太多了,还要考虑32位和64位的问题,还要考虑不同目标机上安装的OFFICE版本不同(有些甚至是WPS)这里是下载地址
解决方案:
谢大神!我先整理思路!在打开的基础上导入,而不是新建再导入,这个我研究过,没有成功。。。所以才想的这个办法。
解决方案:
刚开始学习c#,摸着石头过河,参考了很多选了OLEDB,已经发现很多问题了!我本来想尝试excel对象方法!都没有接触过,不知哪个好,只能一个个试过来,再次感谢大家!
解决方案:
刚才那个问题确实是乱猜了,那个null指的是dataviewgrid中的新增的表格为空?这个我不能理解.1.打开excel,数据到了dataviewgrid中2.修改dataviewgrid,在里面添加了一行3.将dataviewgrid中所有数据复制到dt中,当运行至增加的行时,出现了错误。表格入下:第五行,序列号4为新增,在页面增加,手动增加。代码如下:foreach(DataGridViewColumnheaderCellindataGridView1.Columns){dt.Columns.Add(headerCell.HeaderText);}introwCount=0;foreach(DataGridViewRowitemindataGridView1.Rows){rowCount++;DataRowdr=dt.NewRow();for(inti=0;i<dt.Columns.Count;i++){dr[0]=item.Cells[i].Value.ToString();}dt.Rows.Add(dr);}错误如下:
解决方案:
因为你设置了表格可以用户新增行那么最后一行是空行,里面是nullnull执行ToString(),当然就报错了
解决方案:
名称不能一样你sql换个别名吧
解决方案:
放灵活一点,错误提示已经说得很清楚了
解决方案:
在我的不懈努力之下终于可以更新了,但是更新有问题啊!!!我在dataviewgrid中添加了一行4yy,但是excel中添加了四行:代码如下:privatevoidsaveButton_Click(objectsender,EventArgse){stringstrExcelFileName=openFileDialog1.FileName;stringstrCon="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="+strExcelFileName+";ExtendedProperties='Excel12.0;HDR=YES;IMEX=0'";stringstrCom="SELECT*FROM[Sheet1$]";OleDbConnectionmyConn=newOleDbConnection(strCon);myConn.Open();OleDbDataAdaptermyDataAdapter=newOleDbDataAdapter(strCom,myConn);DataSetmyDataSet=newDataSet();myDataAdapter.Fill(myDataSet,"[Sheet1$]");myConn.Close();myDataSet.Tables[0].Clear();DataTabledt=myDataSet.Tables[0];/*foreach(DataGridViewColumnheaderCellindataGridView1.Columns){dt.Columns.Add(headerCell.HeaderText);dt.columns}*/introwCount=0;foreach(DataGridViewRowitemindataGridView1.Rows){rowCount++;DataRowdr=dt.NewRow();for(inti=0;i<dt.Columns.Count;i++){if(item.Cells[i].Value!=null)dr[i]=item.Cells[i].Value.ToString();}dt.Rows.Add(dr);}OleDbCommandBuilderodcb=newOleDbCommandBuilder(myDataAdapter);odcb.QuotePrefix="[";//用于搞定INSERTINTO语句的语法错误odcb.QuoteSuffix="]";myDataAdapter.Update(myDataSet,"[Sheet1$]");//更新数据集对应的表dataGridView1.DataSource=myDataSet.Tables[0].DefaultView;//显示到datagridview}
解决方案:
废话嘛.你这是又去数据库里查询了一次,把数据放到dt里然后循环表,追加到dt的后面去你不敢直接new个dt出来或者dt赋值完先clear掉,再add
解决方案:
1.我clear了啦,加粗看到没,dt我也clear过,没有效果。2.也尝试过将myConn.Close();放置最后,也没有效果。
解决方案:
可是这样更新就没问题啊:privatevoidForm1_Load(objectsender,EventArgse){stringstrCon="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="+@"d:/成绩表2013.xlsx"+";ExtendedProperties='Excel12.0;HDR=YES;IMEX=0'";OleDbConnectionmyConn=newOleDbConnection(strCon);stringstrCom="SELECT*FROM[Sheet1$]";myConn.Open();OleDbDataAdaptermyDataAdapter=newOleDbDataAdapter(strCom,myConn);DataSetmyDataSet=newDataSet();myDataAdapter.Fill(myDataSet,"[Sheet1$]");myConn.Close();DataTabledt=myDataSet.Tables[0];//初始化DataTable实例dt.PrimaryKey=newDataColumn[]{dt.Columns["序列号"]};//创建索引列DataRowmyRow=dt.NewRow();myRow["序列号"]=4;myRow["人名"]=yz;dt.Rows.Add(myRow);OleDbCommandBuilderodcb=newOleDbCommandBuilder(myDataAdapter);odcb.QuotePrefix="[";//用于搞定INSERTINTO语句的语法错误odcb.QuoteSuffix="]";myDataAdapter.Update(myDataSet,"[Sheet1$]");//更新数据集对应的表dataGridView1.DataSource=myDataSet.Tables[0].DefaultView;//显示到datagridview}这个我试过,至增加一行!!不会将之前的也增加一遍!!
解决方案:
断点跟,clear之后,是否真的清空了MS上次听说某个版本的vs执行clear没有反应,需要执行rows.clear和columns.clear才行
解决方案:
我现在开始着手与研究新方法,不过老方法我也不会放弃!!!
解决方案:
真的清空了,我断点看过了,只有两个抬头了,数据都没得了。
解决方案:
我知道了.myDataAdapter.Update(myDataSet,"[Sheet1$]")这个你还是换个方式,不要这么用了它会自己检测哪些是新增的,哪些是已有修改的你如果不改动myDataSet,它会去更新,而不是插入而如果你clear掉了,重新add进去,它会认为所有4条都是新数据,所以就多出4条来
解决方案:
1.应该是的!如果不clear,那么添加的更多。2.弊病出现在,dataviewgrid中数据必须一个个拿出来添加到datatable中,不能只拿新增。3.如果可以只拿增加的出来,就不需要cleardatatable。4.添加对比,找到哪些是新增也是一个办法,应该麻烦!我可以尝试一下。

时间: 2024-10-14 23:36:26

名为“序列号”的列已属于此 DataTable!!!!!!的相关文章

insert into向access插入数据时,字段名(也就是列的名字)之间有空格,去掉空格,就可以

问题描述 insert into向access插入数据时,字段名(也就是列的名字)之间有空格,去掉空格,就可以 insert into test(Image Name) values ('1233424.tif') 提示是语法错误,问题在Image Name,去掉空格就对,这是为什么??? 解决方案 如果字段名一定要包含空格的话,可以给这一字段加中括号即可正常插入. insert into 表1([Image Name]) values('1233424.tif') 解决方案二: 包含特殊字符的

Sql Server数据库中的更新表名、列名、列值

更新表名: exec sp_rename '旧表名','新表名' 更新列名: exec sp_rename '表名.[字段原名]','字段新名','column'                   exec sp_rename '表名.[旧列名]','新列名','column' 更新某一行中的一列     我们为 lastname 是 "Wilson" 的人添加 firstname:    UPDATE Person SET FirstName = 'Fred' WHERE Last

五名青年网吧偷内存条已交待作案50多起

重庆 (记者 袁婧)最近天气越来越热,渝北5个男青年穿上相同款式的短裤,出没于两路城区的多个网吧.他们平均年龄不到20岁,最小那个瘦高帅气,名叫小林. 本该学习文化知识的他们,却在外漂泊.更难以想象的是,他们离开网吧时,常带走电脑上的内存条和CPU,然后卖给收购电脑配件的商家. 手脚灵活的小林,其实只学了十几天的电脑技术,对装.拆硬件已十分熟悉.他梦想开一家电脑维修店,然而,他戴上了冰冷的手铐. 日租房电脑里少了东西 24日下午5点左右,一男子匆匆来到渝北区双龙派出所报警:有两个小青年租了他的日

胡润百富榜揭晓34名豫商入列

文/董畅岩 每年一度的"胡润百富榜"近日在北京正式发布,这是胡润研究院连续第十二次发布"胡润百富榜".今年的榜单显示,全国范围内身家超过10亿的富豪人数增加到1363人,身家百亿的富豪达到97人. 具有"饮料大王"之称的娃哈哈集团领导人宗庆后家族,以超过800亿元的财富成为"中国首富",而河南新乡上市公司华兰生物的控制人安康家族,以超过110亿元的财富成为"河南首富". 包括安康家族在内,共有34位出生地在

传香港一线男星与百名女子上床证实已患艾滋病

传某香港男艺人患艾滋病(1 /8张) 香港某媒体报道,香港娱乐圈传出,一名Y男星患上绝症艾滋病.与他有过"亲密"关系的男/女星,都静悄悄去做艾滋病测试,希望不要惨被感染. 有关Y男星的资料,周刊给的"暗示"颇多: ●外型俊朗,身材健硕,与不少男/女星传过绯闻. ●爱泡夜店,性喜猎艳,男女通吃. ●电视圈稳坐一线小生位置 ●在电影圈是抢手货,拍过几部票房与口碑皆不错的电影! ●演而优则唱,进军乐坛当歌手,歌影视三线发展. ●近年北上中国赚人民币,常到北京.上海夜店耍乐

datatable计算列-C# Winform项目,DataTable怎样能实现用SQL标量函数作为计算列公式?

问题描述 C# Winform项目,DataTable怎样能实现用SQL标量函数作为计算列公式? 当把DataTable的计算列公式设置为数据库标量函数dbo.function()时,运行程序是会提示function()不存在. DataTable的列可以实现和SQL一样的计算列规范吗?或者有其他可替代方案?研究好几天了,还是没头绪,求大神解惑. 解决方案 反正一般都用linq,当然你不会linq就没辙了.

[请教] asp.net对数据倒入excel文件的问题?

问题描述 是这样,做一个web程序,实现用excel进行批量倒入的功能.现在写了一部分代码,有问题不知道怎么写下去啦!请各位高手帮忙!代码如下:Label1.Text=this.File1.PostedFile.FileName;stringexcelstr=Label1.Text.ToString().Trim();stringmystring="Provider=Microsoft.Jet.OLEDB.4.0;DataSource='"+excelstr+"';Exten

选择MYSQL列的类型

   2.3 选择列的类型    上一节描述了各种可供选择的MySQL的列类型及其属性,以及它们可存储的各种值,所占用的存储空间等等.但是在实际创建一个表时怎样决定用哪些类型呢?本节讨论在做出决定前应考虑的各种因素.最"常用"的列类型是串类型.可将任何数据存储为串,因为数和日期都可以串的形式表示.但是为什么不将所有列都定义为串从而结束这里的讨论呢?让我们来看一个简单的例子.假定有一些看起来像数的值.可将它们表示为串,但应该这样做吗?这样做会发生什么事?    有一桩事不可避免,那就是可

将一个表中个某一列修改为自动增长的方法_MsSql

昨天有位学生问我"一个表已经建好了,能不能将里面的一个字段改为自动增长?","能,但没有必要去修改它,应该在建表的时候就设计好" 我说. 这时候他和另一位学生 讨论起来.他觉得可以,另一位试过说不行.因为他们不是我带班级的学生,他们也咨询了自己的老师,所以我没有再发表意见. 需求: 如何将一张表中个某一列修改为自动增长的. 解答: 1) 情景一:表中没有数据, 可以使用 drop column然后再add column alter table 表名 drop col