首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

数据库建表有关问题

2012-01-13 
数据库建表问题错误:对象名无效动态建立了一个数据库其名字储存在公有类infoClass的DataBaseName属性中读

数据库建表问题
错误:对象名无效
动态建立了一个数据库其名字储存在公有类infoClass的DataBaseName属性中
读取一文本文件,然后用文本文件的名字做新建表名,将读取的数据写入新建表中.
简单的流程:读取文件-打开数据库-用文件名做表名建新表(字段PointName,x,y,H)-将数据存如表中.

文本数据格式
A,1000.0000,1000.0000,65300.00000
B,1230.0000,1330.1235,62100.33333
C,8547.3211,1356.2587,98743.25954
............

比如我读取的文本文件shuju.txt,而当我用shuju做表名插入数据后显示shuju对象名无效.
请问问题出在拿里?

代码如下:
try
                        {
                                if   (OpenFileDialog1.ShowDialog()   ==   DialogResult.OK)
                                {
                                        path   =   OpenFileDialog1.FileName;//获取文本文件名(全路径)
                                        //打开文本文件
                                        FileStream   datafile   =   new   FileStream( " "   +   path   +   " ",   FileMode.Open,   FileAccess.Read);//打开文本文件
                                        //提取path中的文件名(如c:\\shuju.txt则只提取shuju)
                                        filename   =   Path.GetFileNameWithoutExtension(path);
                                        //将储存在公有类infoClass中的DataBaseName属性值取出
string   databasename   =   infoClass.DataBaseName;
                                        //设立数据库连接字符串
                                        string   sqlstring   =   "server=.\\sqlexpress;uid=;pwd=;database= "   +   databasename   +   ";Integrated   security=SSPI ";
                                        //连接数据库
                                        SqlConnection   mycon   =   new   SqlConnection(sqlstring);
                                        if   (mycon.State   !=   ConnectionState.Open)
                                                mycon.Open();
                                        //创建数据库列表及字段
                                        string   datable   =   "CREATE   TABLE   "   +   filename   +   "(PointName   CHAR(8),   x   DECIMAL(10,4),y   DECIMAL(10,4),H   DECIMAL(10,4)) ";


                                        SqlCommand   cmd   =   new   SqlCommand(datable,   mycon);
                                        //读取文件插入数据到表中
                                        StreamReader   dataread   =   new   StreamReader(datafile);
                                        while   ((line   =   dataread.ReadLine())   !=   null)
                                        {
                                                //将读取的一行字符串用‘,’号分割
                                                string[]   value   =   line.Split( ', ');
                                                //创建写入字段数据流
                                                string   sql   =   "INSERT   INTO   "   +   filename   +   "(PointName,   x,   y,H)VALUES   ( ' "+value[0]+ " ', "   +   decimal.Parse(value[1])   +   ",   "   +   decimal.Parse(value[2])   +   ", "   +   decimal.Parse(value[3])   +   ")   ";
                                                cmd   =   new   SqlCommand(sql,   mycon);
                                                cmd.ExecuteNonQuery();
                                        }  
                                }
                        }
                        catch   (Exception   error)
                        {
                                MessageBox.Show(error.ToString(),   "错误 ");
                        }
                }


[解决办法]
你的表都没创建成功,怎么能插纪录呢?


我建议你在SqlCommand cmd = new SqlCommand(datable, mycon);之后先cmd.ExecuteNonQuery();一下,然后再循化插纪录
[解决办法]
首先,你看下filename的值符不符合sql命名的规范
然后,建议你加个判断,该数据库是否存在。即把
string datable = "CREATE TABLE " + filename + "(PointName CHAR(8), x DECIMAL(10,4),y DECIMAL(10,4),H DECIMAL(10,4)) ";
改成
string datable = "if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[ "+filename+ "] ') and OBJECTPROPERTY(id, N 'IsUserTable ') = 1) print null else CREATE TABLE "+filename+ "(PointName CHAR(8), x DECIMAL(10,4),y DECIMAL(10,4),H DECIMAL(10,4)) ";


热点排行