五丰称屠宰重客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

99 lines
3.5 KiB

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Forks.EnterpriseServices.BusinessInterfaces;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.Utils.Data;
namespace BO {
public class UpdateDb {
public static string CreateTables(string conStr, string dbName) {
string s;
using (ISqlUtil sqlUtil = new SqlUtil(conStr)) {
var hasDb = (string)sqlUtil.ExecuteScalar("select '1' from master..sysdatabases where name='" + dbName + "'");
if (hasDb == "1") {
s = ChangeDatabase(conStr, dbName);
return s;
}
sqlUtil.ExecuteNonQuery("create database [" + dbName + "] COLLATE Chinese_PRC_CI_AS");
sqlUtil.ExecuteNonQuery("alter database [" + dbName + "] set recovery simple");
if (GetSqlServerMainVersion(sqlUtil) >= 9) {
SetSql2000Comptable(sqlUtil, dbName);
}
s = ChangeDatabase(conStr, dbName);
}
try {
using (ISqlUtil sqlUtil = new SqlUtil(s)) {
Dmo.CreateTables(sqlUtil, GetTypes());
return s;
}
} catch {
SqlConnection.ClearAllPools();
using (var sqlUtil = new SqlUtil(conStr)) {
sqlUtil.ExecuteNonQuery("drop database [" + dbName + "]");
}
throw;
}
}
static int GetSqlServerMainVersion(ISqlUtil sqlUtil) {
string s = (string)sqlUtil.ExecuteScalar("SELECT SERVERPROPERTY('ProductVersion')");
return int.Parse(s.Split(new[] { '.' }, 2)[0]);
}
static void SetSql2000Comptable(ISqlUtil sqlUtil, string dbName) {
using (var cmd = sqlUtil.Connection.CreateCommand()) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_dbcmptlevel";
cmd.Parameters.Add(CreateParameter(cmd, "@dbname", DbType.String, dbName));
cmd.Parameters.Add(CreateParameter(cmd, "@new_cmptlevel", DbType.Int32, 80));
cmd.ExecuteNonQuery();
}
}
static IDbDataParameter CreateParameter(IDbCommand cmd, string name, DbType type, object value) {
var result = cmd.CreateParameter();
result.DbType = type;
result.ParameterName = name;
result.Value = value;
return result;
}
static string ChangeDatabase(string conString, string db) {
var con = SqlConnectionString.Parse(conString);
con.Database = db;
return con.ToString();
}
public static void UpdateTables(string conStr) {
using (var context = new TransactionContext(Dmo.NewSession(conStr))) {
AddDefaultUser(context);
}
using (ISqlUtil sqlUtil = new SqlUtil(conStr)) {
Dmo.UpdateTables(sqlUtil, GetTypes());
}
}
private static void AddDefaultUser(TransactionContext context) {
const string sql = "select * from LoginUser";
var obj = context.Session.ExecuteSqlScalar(sql);
if (obj != null)
return;
//-- 创建默认登陆用户
const string insert = "insert dbo.LoginUser(UserName, PassWord, RoleSchema) values('{0}', cast('' as binary), '{1}')";
context.Session.ExecuteSqlNonQuery(string.Format(insert, "system", "system"));
context.Session.ExecuteSqlNonQuery(string.Format(insert, "user1", "operator"));
context.Session.ExecuteSqlNonQuery(string.Format(insert, "set", "operator"));
context.Commit();
}
private static IEnumerable<Type> GetTypes() {
return BOClassAttribute.GetBoClasses();
}
}
}