日期:2014-05-16  浏览次数:21013 次

求助:在C#winform中如何调用一个sql脚本文件,脚本内有多个分号
本帖最后由 hwhtj 于 2014-03-25 15:57:27 编辑
如题
在C#winform中如何调用一个sql脚本文件(txt格式)
此脚本有多个分号 
类似于
begin
  for i in (select a.rowid,b.name from tba a,tbb b where a.id=b.id) loop
update tba set name=i.name where rowid=i.rowid;
end loop;
end;

我原来的代码如下,运行出错
string connection = ConfigurationManager.AppSettings["conn"].ToString();
            System.Data.OracleClient.OracleConnection cnn = new OracleConnection(connection);
            string filepath = "脚本.txt";
            System.IO.StreamReader sr = new System.IO.StreamReader(filepath);
            string sqlstr = sr.ReadToEnd();
            sr.Close();
            System.Data.OracleClient.OracleCommand Command = new System.Data.OracleClient.OracleCommand(sqlstr, cnn);
            Command.Connection.Open();
            Command.ExecuteNonQuery();
            Command.Connection.Close();

------解决方案--------------------
编码有问题,这个是StreamReader常出现的问题~
建议用using来完成读写 因为StreamReader可以直接使用using来完成读写而且不需要Close.

       string filepath = "D:\\脚本.txt";
            using (StreamReader sr = new StreamReader(filepath, System.Text.Encoding.GetEncoding("GB2312")))
            {
                string sqlstr = sr.ReadToEnd();
                Console.ReadLine();
            }

这个试试..
------解决方案--------------------
哪句报错,出错的信息是什么?
------解决方案--------------------
估计是脚本内的分号,或者什么符号之类的被当做sql语句,造成的sql语句出错吧。
------解决方案--------------------
断点看一下 得到的 sqlstr 字符串是什么,单独赋值执行试试