【发布时间】:2017-11-27 19:01:12
【问题描述】:
我希望我的应用程序连接到服务器并在它运行的任何电脑上创建数据库。我有代码,但它只能在我的计算机上运行,在其他计算机上运行时,它不会连接到该计算机服务器,也不会创建数据库
这是我的代码,我有启动屏幕表单,我想在应用程序运行时检查该电脑上是否存在数据库,如果不创建它。我的问题是,我的代码没有捕获服务器名称,只显示消息“错误的服务器名称”
public partial class Splash : Form
{
public Splash()
{
InitializeComponent();
Properties.Settings.Default.Server = "(local)";
timer.Enabled = true;
}
private void CheckDatabase()
{
try
{
using (SqlConnection conn = Helper.ConnectionToServer())
{
if (Properties.Settings.Default.Server != string.Empty)
{
using (SqlCommand cmd = new SqlCommand(
"IF EXISTS (SELECT name FROM sys.databases WHERE name = 'MyDb') SELECT 1 ELSE SELECT 0",
conn))
{
conn.Open();
int value = (int)cmd.ExecuteScalar();
conn.Close();
if (value != 1)
{
MessageBox.Show("Database doesn't exist");
timer.Enabled = false;
CreateDatabase();
}
}
}
else
{
timer.Enabled = true;
}
}
}
catch
{
MessageBox.Show("Bad server name");
}
}
private void CreateDatabase()
{
string serverStr = "CREATE DATABASE [MyDb]";
string databaseStr = @"
CREATE TABLE [dbo].[Worker] (
[FirstName] NVARCHAR (50) NOT NULL,
[Password] NVARCHAR (50) NOT NULL,
[LastName] NVARCHAR (50) NOT NULL,
PRIMARY KEY CLUSTERED ([Password] ASC)
);
CREATE TABLE [dbo].[Article] (
[ItemName] NVARCHAR (50) NOT NULL,
[Barcode] NVARCHAR (50) NOT NULL,
[Price] MONEY NOT NULL,
CONSTRAINT [PK_Article] PRIMARY KEY CLUSTERED ([Barcode] ASC)
);";
using (SqlConnection conn = Helper.ConnectionToServer())
{
try
{
using (SqlCommand comm = new SqlCommand(serverStr, conn))
{
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
}
catch
{
MessageBox.Show("Bad server name");
}
}
using (SqlConnection conn = Helper.ConnectionToDatabase())
{
using (SqlCommand comm = new SqlCommand(databaseStr, conn))
{
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
timer.Enabled = true;
}
}
}
我还有一个辅助类,每当我使用 sql 命令时都会用到它
class Helper
{
public static SqlConnection ConnectionToDatabase()
{
string con = string.Format(@"Data Source=DESKTOP-RFJ38NM;Initial Catalog=MyDb;Integrated Security=True", Properties.Settings.Default.Server);
return new SqlConnection(con);
}
public static SqlConnection ConnectionToServer()
{
string con = string.Format(@"Data Source=DESKTOP-RFJ38NM;Integrated Security=True", Properties.Settings.Default.Server);
return new SqlConnection(con);
}
}
【问题讨论】:
-
大多数 PC 是台式机而不是服务器,并且它们没有运行 MySQL。请阅读tour 然后How to Ask 然后minimal reproducible example 然后编辑您的问题以包含有关您尝试做什么的更多详细信息。也许你只需要一个像 SQLite 这样的库,但你告诉我们的还不够。
-
@DaveS OP 没有提到 Mysql,但您的其余评论适用。
-
我认为问题在于我静态定义了服务器字符串,因为它不起作用
-
"SqlConnection 类 - 表示与 SQL Server 数据库的打开连接。无法继承此类。"有关桌面 SQL 软件的不同选择,请参阅此 SO 问题 - stackoverflow.com/questions/31914283/…。另外,您的问题现在好多了,编辑工作做得很好。
标签: c# sql-server database dynamic