WIN7 系统用代码创建SQLServer数据库,创建不上,XP就可以

时间:2022-03-03 04:34:02
WIN7 系统用代码创建SQLServer数据库,创建不上,XP就可以。求救~
创建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的提权问题

#6


把创建过程放到你的应用程序里自动完成,不要放到什么SetupUp打包。制作安装包,应该用20秒钟,而不要浪费更多时间。

你在平时调试你的应用程序的过程中,总是维护这个自动创建(或者升级)数据库的过程。在你的XP或者win7平台上安装vs,平时开发时就经常测试、调试这些代码。

#7


该回复于2013-06-29 17:31:37被管理员删除

#8


可能是win7的权限问题

#9


引用 5 楼 bdmh 的回复:
很可能是权限问题,你试着用sql去创建,别调用osql.exe
或者去解决process的提权问题


win7我用VS调试可以创建,用CMD命令执行SQL脚本也可以创建。就是程序打包完以后只能创建数据库,而不能创建表。xp系统数据库和表都能创建。

#10


该回复于2013-06-29 17:31:37被管理员删除

#1


报什么错啊?把错误信息打出来

#2


不报错,我的程序是用SetUp打包完,安装完程序,点击创建数据库Win7只能创建数据库,创建不了表。 而XP就可以创建。,

#3


你走一调试,看看建表那里执行了吗。

#4


权限。然后尝试输出写错误log 否则不好找错误信息。

#5


很可能是权限问题,你试着用sql去创建,别调用osql.exe
或者去解决process的提权问题

#6


把创建过程放到你的应用程序里自动完成,不要放到什么SetupUp打包。制作安装包,应该用20秒钟,而不要浪费更多时间。

你在平时调试你的应用程序的过程中,总是维护这个自动创建(或者升级)数据库的过程。在你的XP或者win7平台上安装vs,平时开发时就经常测试、调试这些代码。

#7


该回复于2013-06-29 17:31:37被管理员删除

#8


可能是win7的权限问题

#9


引用 5 楼 bdmh 的回复:
很可能是权限问题,你试着用sql去创建,别调用osql.exe
或者去解决process的提权问题


win7我用VS调试可以创建,用CMD命令执行SQL脚本也可以创建。就是程序打包完以后只能创建数据库,而不能创建表。xp系统数据库和表都能创建。

#10


该回复于2013-06-29 17:31:37被管理员删除