当前位置:编程学习 > C#/ASP.NET >>

C#,WINFORM中用代码执行.SQL脚本

每执行一次需要创建一个数据库模型,数据来源是A.SQL文件,读取内容后,经过修改生成一个STRING,这个就等同于A.SQL文件的内容,只是一些关键字被修改了,我要在C#中执行这个String,怎么做?数据库是MYSQL,由于每次执行的内容都会变,所以没办法做成存储过程,想过比较笨的办法,可以再重新生成文件,再执行,但是不知道可以不,如果可以直接执行这个String字符串那就好了。。。期待高手出现!!! --------------------编程问答--------------------

                    //如果文件是多条语句,要readline然后调用这个方法,保证每条string都执行      
                    //读取文件
                    string sql = 从A.sql来的string;
                    //在事务中执行
                    using (SqlConnection conn = new SqlConnection(connStr))
                    {
                        conn.Open();
                        SqlTransaction tran = conn.BeginTransaction();
                        try
                        {
                            //用sqlcommand 执行这个语句就可以了
                            //我这里用了sqlHelper类,你可以在网上找到
                            SqlHelper.ExecuteNonQuery(tran, CommandType.Text, sql);
                            tran.Commit();
                            System.Windows.MessageBox.Show("执行成功);
                        }
                        catch (Exception ex)
                        {
                            tran.Rollback();
                            System.Windows.MessageBox.Show(ex.Message);
                        }
                        finally
                        {
                            tran.Dispose();
                        }
                    }

--------------------编程问答--------------------
引用 1 楼 kid_wang 的回复:
C# code

                    //如果文件是多条语句,要readline然后调用这个方法,保证每条string都执行      
                    //读取文件
                    string sql = 从A.sql来的string;
                    //在事务中执行
          ……

--------------------编程问答--------------------


        /// <summary>
/// 从sql脚本中获取每一段sql语句(go用来分段)
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private static List<string> GetSqlStrsFromFile(string FilePath)
{
            string FileText = File.ReadAllText(FilePath, Encoding.Default);
            if (string.IsNullOrEmpty(FileText))
                return null;
            //读取文件
            string[] sqlStrs = File.ReadAllLines(FilePath, Encoding.Default);//FileText.Split('\r','\n');
            List<string> alSql = new List<string>();
            string commandText = "";
            //循环获取每一行的sql语句
            for (int i = 0; i < sqlStrs.Length; i++)
            {                
                //如果不是go,则追加到要执行的sql语句中
                if (!sqlStrs[i].Trim().Equals("go", StringComparison.OrdinalIgnoreCase))
                {
                    commandText += sqlStrs[i].Trim();
                    commandText += "\r\n";
                    //如果是最后一行,则将要执行的sql语句添加到数组中
                    if (i + 1 == sqlStrs.Length)
                        alSql.Add(commandText);
                }
                else
                {
                    if (commandText == "")
                        continue;
                    alSql.Add(commandText);
                    commandText = "";
                }
            }
            return alSql;
}

//执行sql脚本文件
public static void ExcuteSQLFile(string FilePath)
{
            List<string> list = GetSqlStrsFromFile(FilePath.ToString());
            if (list == null)
                return;
            foreach (string str in list)
            {
                try
                {
                    DBHelper.ExecuteNonQuery(str);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
}
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,