读书人

数据库建表有关问题

发布时间: 2012-01-13 22:43:29 作者: rapoo

数据库建表问题
错误:对象名无效
动态建立了一个数据库其名字储存在公有类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)) ";


读书人网 >C#

热点推荐