zoukankan      html  css  js  c++  java
  • 关于在.net中动态创建数据库(包括表,视图。。。)有参考别人的代码。。。

         最近因为需要需要做一个动态生成数据库的东西,很是头大,不过后来参考了一些文章,然后拼凑最后做出来的。。。

         先占代码先。。

    using System;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    using System.Collections;
    using System.IO;

    public partial class Default2 : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    {
    if (execfile())
    {
    Response.Write("Success");
    string constr = "Data Source=.;Initial Catalog=SqlTest111;Integrated Security=True"; // 定义链接字符窜
    SqlConnection conn = new SqlConnection(constr);
    conn.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    ArrayList Lists = Default2.ExecuteSqlFile(Server.MapPath("script.sql")); //调用ExecuteSqlFile()方法,反回 ArrayList对象;
    string teststr; //定义遍历ArrayList 的变量;
    foreach (string varcommandText in Lists)
    {
    teststr = varcommandText; //遍历并符值;
    //Response.Write(teststr + "|@|<br>");
    cmd.CommandText = teststr; //为SqlCommand赋Sql语句;
    cmd.ExecuteNonQuery(); //执行
    }
    ArrayList Listssss = Default2.ExecuteSqlFile(Server.MapPath("script111.sql")); //调用ExecuteSqlFile()方法,反回 ArrayList对象;
    //定义遍历ArrayList 的变量;
    foreach (string varcommandText in Listssss)
    {
    teststr = varcommandText; //遍历并符值;
    //Response.Write(teststr + "|@|<br>");
    cmd.CommandText = teststr; //为SqlCommand赋Sql语句;
    cmd.ExecuteNonQuery(); //执行
    }
    conn.Close();
    }
    }
    }
    /// <summary>
    /// 创建连接起用进程建立数据库
    /// </summary>
    /// <returns></returns>
    private bool execfile()
    {
    try
    {
    string connStr = "data source=.;user id=sa;password=123;persist security info=false;packet size=4096";
    ExecuteSql(connStr, "master", "CREATE DATABASE" + " SqlTest111");//调用ExecuteNonQuery()来创建数据库
    System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();//创建一个进程
    sqlProcess.StartInfo.FileName = "osql.exe";//OSQL基于ODBC驱动连接服务器的一个实用工具(可查阅SQL帮助手册)
    //string str = @"C:\Program Files\Microsoft SQL Server\MSSQL\Data";
    sqlProcess.StartInfo.Arguments = " -U sa -P sa -d SqlTest -i C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data";//获取启动程序时的参数
    sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//调用进程的窗口状态,隐藏为后台
    sqlProcess.Start();
    sqlProcess.WaitForExit();
    sqlProcess.Close();
    return true;
    }
    catch (Exception ex)
    {
    throw ex;
    }
    }
    /// <summary>
    /// 创建数据库,调用ExecuteNonQuery()执行
    /// </summary>
    /// <param name="conn"></param>
    /// <param name="DatabaseName"></param>
    /// <param name="Sql"></param>
    private void ExecuteSql(string conn, string DatabaseName, string Sql)
    {
    System.Data.SqlClient.SqlConnection mySqlConnection = new System.Data.SqlClient.SqlConnection(conn);
    System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql, mySqlConnection);
    Command.Connection.Open();
    Command.Connection.ChangeDatabase(DatabaseName);
    try
    {
    Command.ExecuteNonQuery();
    }
    finally
    {
    Command.Connection.Close();
    }
    }

    public static ArrayList ExecuteSqlFile(string varFileName)
    {
    //
    // TODO:读取.sql脚本文件
    //
    StreamReader sr = File.OpenText(varFileName);//传入的是文件路径及完整的文件名
    ArrayList alSql = new ArrayList(); //每读取一条语名存入ArrayList
    string commandText = "";
    string varLine = "";
    while (sr.Peek() > -1)
    {
    varLine = sr.ReadLine();
    if (varLine == "")
    {
    continue;
    }
    if (varLine != "GO")
    {
    commandText += varLine;
    commandText += " ";
    }
    else
    {
    alSql.Add(commandText);
    commandText = "";
    }
    }

    sr.Close();
    return alSql;
    }
    }


    里面的script.sql文件是在数据库中点击生成脚本,生成完成后,将文件拷到项目里面来。。。还有这个文件里面是视图。。。

    PS:需要注意的就是,因为在创建数据库的过程中,必须得先建数据库,在建表,在建视图。。等等,所以在生成脚本的时候有时会吧所有的东西都生成到一块去,需要做的就是把里面的表和视图。。分开到不同的***.SQL文件中去,按照顺序创建。。。这样就可以了。。。完。。。。

  • 相关阅读:
    [Contest on 2020.4.2] 影帝杯狂欢赛
    [BZOJ 3821] 玄学
    CodeForces 432D Prefixes and Suffixes
    CodeForces 17E Palisection
    CodeForces 665E Beautiful Subarrays
    BZOJ 2989 数列
    changeeksdja
    Jmeter学习——1
    LoadRunner监控Linux与Windows方法(经典)
    LR检查点小结
  • 原文地址:https://www.cnblogs.com/weiying/p/weiying12_26.html
Copyright © 2011-2022 走看看