创建SQL数据库代码是
string rel = ValidateEx(tbIP, tbName, tbPw);
if (string.IsNullOrEmpty(rel))
{
this.Cursor = Cursors.WaitCursor;
try
{
if (MessageBoxType.MessageYesOrNo("确定创建数据库?"))
{
SqlDbBase.SqlDataBase sqlBase = new SqlDbBase.SqlDataBase(true);
string cmbDBText=cmbDB.Text;
bool relt= sqlBase.CreateDataBase(tbIP.Text, tbName.Text, tbPw.Text, cmbDB.Text);
Config cfg = new Config();
cfg.SaveSConfig(tbIP.Text, tbName.Text, tbPw.Text, cmbDB.Text);
DataTable tableDBName = sqlBase.GetSysDataBases();
cmbDB.DataSource = tableDBName;
cmbDB.DisplayMember = "Name";
cmbDB.ValueMember = "Name";
// cmbDB..SelectedText = cmbDBText;
if (relt)
{
MessageBoxType.MessageBoxNormal("创建成功!");
}
}
}
catch (Exception ex)
{
MessageBoxType.MessageSaveError("创建失败!");
}
//创建数据库
public bool CreateDataBase(string serverName, string userName, string userPwd, string dbName)
{
bool isCreateDB = true;
DataTable dataTable = new DataTable();
try
{
this.Open();
string strSql = " USE MASTER SELECT name FROM master.dbo.sysdatabases WHERE name=@name";
SqlDataAdapter sqlAdapter = new SqlDataAdapter(strSql, this.sqlDBConnetion);
sqlAdapter.SelectCommand.Parameters.Add("@name", SqlDbType.NVarChar);
sqlAdapter.SelectCommand.Parameters[0].Value = dbName.Trim();
sqlAdapter.Fill(dataTable);
if (dataTable.Rows.Count > 0)
{
isCreateDB = MessageBoxType.MessageYesOrNo("数据库已存在是否覆盖原来数据库?");
}
if (isCreateDB)
{
SqlCommand sqlComm = new SqlCommand();
sqlComm.CommandType = CommandType.Text;
sqlComm.Connection = this.SqlDBConnection;
if (dataTable.Rows.Count > 0)
{
sqlComm.CommandText = "DROP DATABASE " + dbName;
sqlComm.ExecuteNonQuery();
}
sqlComm.CommandText = "CREATE DATABASE " + dbName;
sqlComm.ExecuteNonQuery();
ExcuteOsqlCmd(serverName,dbName, userName, userPwd);
}
return isCreateDB;
}
catch (Exception exp)
{
dataTable = null;
throw new DataException("创建数据库失败,请检查数据连接信息");
}
finally
{
this.Close();
}
/// <summary>
/// 执行OSQL命令
/// </summary>
public static void ExcuteOsqlCmd(string ServeName,string DBName,string uid, string pwd)
{
string Path = System.AppDomain.CurrentDomain.BaseDirectory;
if (File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + @"\SqlDB.sql"))
{
string tempFile =System.AppDomain.CurrentDomain.BaseDirectory + @"\SqlDB.sql";
////if (File.Exists(tempFile))
//// File.Delete(tempFile);
// File.Copy(System.AppDomain.CurrentDomain.BaseDirectory + @"\SqlDB.sql", tempFile);
Process p = new Process();
p.StartInfo.FileName = "osql.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WorkingDirectory = "";
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//
p.StartInfo.Arguments = " -S " + ServeName + " -U " + uid + " -P " + pwd + " -d " + DBName + " -i " + tempFile;
// MessageBox.Show(Path);
try
{
p.Start();
p.WaitForExit();
p.Close();
//File.Delete(tempFile);
}
catch (Exception exp)
{
MessageBoxType.MessageSaveError(exp.Message);
// throw new Exception("执行数据库脚本失败");
}
}
else
{
throw new Exception("数据库脚本不存在");
}
}
最后补充 Win7系统下点击创建按钮能创建上数据库,但是表创建不上!XP系统下就可以创建数据库和表~
求大神指点。
10 个解决方案
#1
报什么错啊?把错误信息打出来
#2
不报错,我的程序是用SetUp打包完,安装完程序,点击创建数据库Win7只能创建数据库,创建不了表。 而XP就可以创建。,
#3
你走一调试,看看建表那里执行了吗。
#4
权限。然后尝试输出写错误log 否则不好找错误信息。
#5
很可能是权限问题,你试着用sql去创建,别调用osql.exe
或者去解决process的提权问题
或者去解决process的提权问题
#6
把创建过程放到你的应用程序里自动完成,不要放到什么SetupUp打包。制作安装包,应该用20秒钟,而不要浪费更多时间。
你在平时调试你的应用程序的过程中,总是维护这个自动创建(或者升级)数据库的过程。在你的XP或者win7平台上安装vs,平时开发时就经常测试、调试这些代码。
你在平时调试你的应用程序的过程中,总是维护这个自动创建(或者升级)数据库的过程。在你的XP或者win7平台上安装vs,平时开发时就经常测试、调试这些代码。
#7
#8
可能是win7的权限问题
#9
win7我用VS调试可以创建,用CMD命令执行SQL脚本也可以创建。就是程序打包完以后只能创建数据库,而不能创建表。xp系统数据库和表都能创建。
#10
#1
报什么错啊?把错误信息打出来
#2
不报错,我的程序是用SetUp打包完,安装完程序,点击创建数据库Win7只能创建数据库,创建不了表。 而XP就可以创建。,
#3
你走一调试,看看建表那里执行了吗。
#4
权限。然后尝试输出写错误log 否则不好找错误信息。
#5
很可能是权限问题,你试着用sql去创建,别调用osql.exe
或者去解决process的提权问题
或者去解决process的提权问题
#6
把创建过程放到你的应用程序里自动完成,不要放到什么SetupUp打包。制作安装包,应该用20秒钟,而不要浪费更多时间。
你在平时调试你的应用程序的过程中,总是维护这个自动创建(或者升级)数据库的过程。在你的XP或者win7平台上安装vs,平时开发时就经常测试、调试这些代码。
你在平时调试你的应用程序的过程中,总是维护这个自动创建(或者升级)数据库的过程。在你的XP或者win7平台上安装vs,平时开发时就经常测试、调试这些代码。
#7
#8
可能是win7的权限问题
#9
win7我用VS调试可以创建,用CMD命令执行SQL脚本也可以创建。就是程序打包完以后只能创建数据库,而不能创建表。xp系统数据库和表都能创建。