C# 判断一个数据库是否存在,不存在在创建 代码如何写

时间:2023-01-05 19:10:44
  conn = new SqlConnection(ConnectionString);
            if (conn.State != ConnectionState.Open)
                conn.Open();
            if (File.Exists(@"F:\GFX_JC_DB\GFX_JC.mdb") == false)
            
            {
                string sql = "CREATE DATABASE GFX_JC ON PRIMARY"
                       + "(name=GFX_JC, filename = 'F:\\GFX_JC_DB\\GFX_JC.mdf', size=3,"
                       + "maxsize=5, filegrowth=10%)log on"
                       + "(name=GFX_JC_log,filename='F:\\GFX_JC_DB\\GFX_JC_log.ldf',size=3,"
                       + "maxsize=20,filegrowth=1)";
                cmd = new SqlCommand(sql, conn);
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (SqlException ae)
                {
                    MessageBox.Show(ae.Message.ToString());
                }

上面是代码,第一次运行能创建数据库,而第二次运行时,提示数据库已经存在,让换个名字创建数据库。也就是说程序依然在创建数据库、求大神解答一下!

12 个解决方案

#1


select * From master.dbo.sysdatabases where name='数据库名'


这句SQL语句会查询指定数据库的详细信息。这样就能查到数据库。

#2


逻辑不对。 不应该在C# 中判断,而应该在C#中执行proc  这个proc中包含 判断数据库是否存在判断,并且根据判断条件 执行是否创建数据库或者提示 数据库已存在。将提示信息返回。

#3


可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。

#4


在系统初始化的时候,都是这么写脚本的,
从系统表中取是否存在对应的表对象,索引之类,没有就创建

#5


引用 3 楼 smthgdin 的回复:
可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#

#6


引用 5 楼 yinyi4120 的回复:
Quote: 引用 3 楼 smthgdin 的回复:

可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#


如果使用他的代码,那么就是
                string sql = "if not exists(select * From master.dbo.sysdatabases where name='GFX_JC ')"
                        +"CREATE DATABASE GFX_JC ON PRIMARY"
                        + "(name=GFX_JC, filename = 'F:\\GFX_JC_DB\\GFX_JC.mdf', size=3,"
                        + "maxsize=5, filegrowth=10%)log on"
                        + "(name=GFX_JC_log,filename='F:\\GFX_JC_DB\\GFX_JC_log.ldf',size=3,"
                        + "maxsize=20,filegrowth=1)";

#7


引用 6 楼 sp1234 的回复:
Quote: 引用 5 楼 yinyi4120 的回复:

Quote: 引用 3 楼 smthgdin 的回复:

可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#


如果使用他的代码,那么就是
                string sql = "if not exists(select * From master.dbo.sysdatabases where name='GFX_JC ')"
                        +"CREATE DATABASE GFX_JC ON PRIMARY"
                        + "(name=GFX_JC, filename = 'F:\\GFX_JC_DB\\GFX_JC.mdf', size=3,"
                        + "maxsize=5, filegrowth=10%)log on"
                        + "(name=GFX_JC_log,filename='F:\\GFX_JC_DB\\GFX_JC_log.ldf',size=3,"
                        + "maxsize=20,filegrowth=1)";

多谢了!
但是我后面还有建数据表,该写爱哪里呢?
实现的功能是这样的:程序运行时,检查系统内存在数据库不,不存在时,创建数据库,同时创建多个表。如果系统存在数据库,则关闭数据库连接

#8



引用 6 楼 sp1234 的回复:
Quote: 引用 5 楼 yinyi4120 的回复:

Quote: 引用 3 楼 smthgdin 的回复:

可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#


如果使用他的代码,那么就是
                string sql = "if not exists(select * From master.dbo.sysdatabases where name='GFX_JC ')"
                        +"CREATE DATABASE GFX_JC ON PRIMARY"
                        + "(name=GFX_JC, filename = 'F:\\GFX_JC_DB\\GFX_JC.mdf', size=3,"
                        + "maxsize=5, filegrowth=10%)log on"
                        + "(name=GFX_JC_log,filename='F:\\GFX_JC_DB\\GFX_JC_log.ldf',size=3,"
                        + "maxsize=20,filegrowth=1)";


引用 6 楼 sp1234 的回复:
Quote: 引用 5 楼 yinyi4120 的回复:

Quote: 引用 3 楼 smthgdin 的回复:

可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#


如果使用他的代码,那么就是
                string sql = "if not exists(select * From master.dbo.sysdatabases where name='GFX_JC ')"
                        +"CREATE DATABASE GFX_JC ON PRIMARY"
                        + "(name=GFX_JC, filename = 'F:\\GFX_JC_DB\\GFX_JC.mdf', size=3,"
                        + "maxsize=5, filegrowth=10%)log on"
                        + "(name=GFX_JC_log,filename='F:\\GFX_JC_DB\\GFX_JC_log.ldf',size=3,"
                        + "maxsize=20,filegrowth=1)";


sql中可以写判断IF 语句?

#9


如果是sqlserver,就用管理工具,将数据库生成脚本,包括创建数据库,表,存储过程,函数等等。。。。。
然后,写个程序去读取脚本,逐一执行(比如说每个go之间就做一段sql执行)。

#10


脚本要有一定顺序,不然会报错。

#11


'F:\\GFX_JC_DB\\GFX_JC.mdf'
你后面创建数据库扩展名是mdf
前面判断是否存在用mdb??

#12


引用 11 楼 Z65443344 的回复:
'F:\\GFX_JC_DB\\GFX_JC.mdf'
你后面创建数据库扩展名是mdf
前面判断是否存在用mdb??


我改改!

#1


select * From master.dbo.sysdatabases where name='数据库名'


这句SQL语句会查询指定数据库的详细信息。这样就能查到数据库。

#2


逻辑不对。 不应该在C# 中判断,而应该在C#中执行proc  这个proc中包含 判断数据库是否存在判断,并且根据判断条件 执行是否创建数据库或者提示 数据库已存在。将提示信息返回。

#3


可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。

#4


在系统初始化的时候,都是这么写脚本的,
从系统表中取是否存在对应的表对象,索引之类,没有就创建

#5


引用 3 楼 smthgdin 的回复:
可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#

#6


引用 5 楼 yinyi4120 的回复:
Quote: 引用 3 楼 smthgdin 的回复:

可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#


如果使用他的代码,那么就是
                string sql = "if not exists(select * From master.dbo.sysdatabases where name='GFX_JC ')"
                        +"CREATE DATABASE GFX_JC ON PRIMARY"
                        + "(name=GFX_JC, filename = 'F:\\GFX_JC_DB\\GFX_JC.mdf', size=3,"
                        + "maxsize=5, filegrowth=10%)log on"
                        + "(name=GFX_JC_log,filename='F:\\GFX_JC_DB\\GFX_JC_log.ldf',size=3,"
                        + "maxsize=20,filegrowth=1)";

#7


引用 6 楼 sp1234 的回复:
Quote: 引用 5 楼 yinyi4120 的回复:

Quote: 引用 3 楼 smthgdin 的回复:

可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#


如果使用他的代码,那么就是
                string sql = "if not exists(select * From master.dbo.sysdatabases where name='GFX_JC ')"
                        +"CREATE DATABASE GFX_JC ON PRIMARY"
                        + "(name=GFX_JC, filename = 'F:\\GFX_JC_DB\\GFX_JC.mdf', size=3,"
                        + "maxsize=5, filegrowth=10%)log on"
                        + "(name=GFX_JC_log,filename='F:\\GFX_JC_DB\\GFX_JC_log.ldf',size=3,"
                        + "maxsize=20,filegrowth=1)";

多谢了!
但是我后面还有建数据表,该写爱哪里呢?
实现的功能是这样的:程序运行时,检查系统内存在数据库不,不存在时,创建数据库,同时创建多个表。如果系统存在数据库,则关闭数据库连接

#8



引用 6 楼 sp1234 的回复:
Quote: 引用 5 楼 yinyi4120 的回复:

Quote: 引用 3 楼 smthgdin 的回复:

可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#


如果使用他的代码,那么就是
                string sql = "if not exists(select * From master.dbo.sysdatabases where name='GFX_JC ')"
                        +"CREATE DATABASE GFX_JC ON PRIMARY"
                        + "(name=GFX_JC, filename = 'F:\\GFX_JC_DB\\GFX_JC.mdf', size=3,"
                        + "maxsize=5, filegrowth=10%)log on"
                        + "(name=GFX_JC_log,filename='F:\\GFX_JC_DB\\GFX_JC_log.ldf',size=3,"
                        + "maxsize=20,filegrowth=1)";


引用 6 楼 sp1234 的回复:
Quote: 引用 5 楼 yinyi4120 的回复:

Quote: 引用 3 楼 smthgdin 的回复:

可以按照2楼的sql。
在需要触发创建数据库的地方,先执行sql判断数据库是否存在,没存在就创建;存在就提示。


这个代码具体怎么写呢?在我上面贴的代码中,我试着写了下,好像报错啊!求大神指引啊!
菜鸟刚学习C#


如果使用他的代码,那么就是
                string sql = "if not exists(select * From master.dbo.sysdatabases where name='GFX_JC ')"
                        +"CREATE DATABASE GFX_JC ON PRIMARY"
                        + "(name=GFX_JC, filename = 'F:\\GFX_JC_DB\\GFX_JC.mdf', size=3,"
                        + "maxsize=5, filegrowth=10%)log on"
                        + "(name=GFX_JC_log,filename='F:\\GFX_JC_DB\\GFX_JC_log.ldf',size=3,"
                        + "maxsize=20,filegrowth=1)";


sql中可以写判断IF 语句?

#9


如果是sqlserver,就用管理工具,将数据库生成脚本,包括创建数据库,表,存储过程,函数等等。。。。。
然后,写个程序去读取脚本,逐一执行(比如说每个go之间就做一段sql执行)。

#10


脚本要有一定顺序,不然会报错。

#11


'F:\\GFX_JC_DB\\GFX_JC.mdf'
你后面创建数据库扩展名是mdf
前面判断是否存在用mdb??

#12


引用 11 楼 Z65443344 的回复:
'F:\\GFX_JC_DB\\GFX_JC.mdf'
你后面创建数据库扩展名是mdf
前面判断是否存在用mdb??


我改改!