VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 921|回复: 6

C#中如何创建SQLSERVER数据库建表

[复制链接]

3

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-3-10 18:30:01 | 显示全部楼层 |阅读模式
SQLSERVER数据库所有的表都生成了SQL脚本,C#中如何创建数据库并使用脚本建表呢?请教!
回复

使用道具 举报

0

主题

119

帖子

67.00

积分

新手上路

Rank: 1

积分
67.00
发表于 2020-6-3 09:00:02 | 显示全部楼层
private bool CreateDB( ref SqlConnection sqlConn )

        {

            string strQuery;

            string[] strComms;

            bool blnBreaked = false;

            if( ReadSQLFromFile( out strQuery ) )

            {

                strQuery = strQuery.Replace( "GO/r/n", ";" );

                strComms = strQuery.Split( ';' );



                SqlCommand sqlComm = new SqlCommand();

                sqlComm.Connection = sqlConn;



                foreach( string strComm in strComms )

                {

                    sqlComm.CommandText = strComm;

                    try

                    {

                        sqlComm.ExecuteNonQuery();

                    }

                    catch( SqlException sqlErr )

                    {

                        MessageBox.Show( sqlErr.Message );

                        blnBreaked = true;

                        break;

                    }

                    catch{

                        blnBreaked = true;

                        break;

                    }

                }

               

                sqlComm.Dispose();

                if( !blnBreaked ) return true;

            }

            return false;

        }



       原先是为了执行简单,让所有的数据库脚本命令一次执行,就用了“;”去代替原先的“GO”,这样的操作会使含有StoreProcedure的数据库脚本无法执行成功。改进的办法就是,把原先的脚本命令集合进行拆分,然后每条命令逐个执行。虽说,看似这种方法效率稍差一些,其实也不尽然,而且达到的效果也和原先的做法一样。



       再有一点要说明的是,即当创建数据库失败的时候,要去删除这个不完备的数据库,其实方法很简单,就是把如下脚本在执行一下即可。

       use master

GO

      

if exists (select * from sysdatabases where name='mytest')

            drop database mytest

GO
回复

使用道具 举报

0

主题

52

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-6-3 13:15:01 | 显示全部楼层
要不就是用cmd执行sql语句 要不就是调用osql执行脚本
回复

使用道具 举报

3

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-6-3 22:45:01 | 显示全部楼层
代码编译不通过555
回复

使用道具 举报

3

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-6-4 21:15:01 | 显示全部楼层
怎么调用osql执行脚本?
回复

使用道具 举报

0

主题

119

帖子

67.00

积分

新手上路

Rank: 1

积分
67.00
发表于 2020-6-6 17:15:01 | 显示全部楼层
代码没有问题!
调用osql如下:
如果是强调在程序中创建数据库,启动一个cmd.exe进程,来执行数据库脚本文件来创建数据库。参见:
// <summary>
/// 调用Osql.exe执行建库脚本
/// </summary>
/// <param name="UserName">数据库访问用户名</param>
/// <param name="Pwd">数据库访问密码</param>

private void CreateDataBase (string UserName,string Pwd)
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
string Path = Application.StartupPath.ToString();
string Parameter = "osql.exe -U " + UserName + " -P " + Pwd + " -S wangxiangmin -i " + Path + @"\ICMS.sql";

try

{

p.Start();              
p.StandardInput.WriteLine(Parameter);
p.StandardInput.WriteLine("exit");
p.StandardInput.WriteLine("exit");
p.WaitForExit();
p.Close();
}

catch(Exception e)
{

MessageBox.Show(e.Message);
               
this.Close();
}

}
回复

使用道具 举报

3

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-6-6 23:15:01 | 显示全部楼层
to 苹果小刀  
执行代码提示我:错误        1        当前上下文中不存在名称“ReadSQLFromFile”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表