我正在使用此查询重命名数据库:
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
Run Code Online (Sandbox Code Playgroud)
但它在排除时显示错误:
消息5030,级别16,状态2,行1
无法独占锁定数据库以执行操作.
我的查询有什么问题吗?
我有一个像下面这样的结构
[StructLayout(LayoutKind.Sequential)]
public struct MyStructType
{
[MarshalAs(UnmanagedType.U1)]
public byte stx;
public UInt16 cmdId;
public UInt16 status;
public UInt16 pktNo;
[MarshalAs(UnmanagedType.U1)]
public byte contPkt;
[MarshalAs(UnmanagedType.U1)]
public byte dataoffset;
public UInt16 dataLength;
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 6)]
public byte[] data;
public UInt16 checkSum;
[MarshalAs(UnmanagedType.U1)]
public byte cr;
}
Run Code Online (Sandbox Code Playgroud)
我试图通过使用下面的代码将此结构转换为字节数组.
byte[] ConvertStructureToByteArray(MyStructType str)
{
int size = Marshal.SizeOf(str);
byte[] arr = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(str, ptr, true);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
return arr;
}
Run Code Online (Sandbox Code Playgroud)
但我得到了以下错误,因为他们不知道的大小
类型'MyStructType'不能作为非托管结构封送; 不能计算有意义的大小或偏移量.
因为这个问题
public UInt16 …Run Code Online (Sandbox Code Playgroud) 使用string创建数据库名称,数据库将成功创建.
示例:
if db_id('Database1') is null create database Database1
Run Code Online (Sandbox Code Playgroud)
命令已成功完成.
但是使用完整的数字创建数据库名称,它有问题
示例:
if db_id('1234567890') is null create database 1234567890
Run Code Online (Sandbox Code Playgroud)
消息102,级别15,状态1,行
1'1234567890'附近的语法不正确.
我的查询有什么不对吗?
当我使用此代码使用Nhibernate为SQL Server CE创建架构时:
Fluently.Configure()
.Database(MsSqlCeConfiguration.Standard
.ConnectionString(c => c.Is("Data Source=" + file))
.Dialect<NHibernate.Dialect.MsSqlCeDialect>()
.Driver<NHibernate.Driver.SqlServerCeDriver>()
.ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<NHibernateSessionFactory>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
private static void BuildSchema(Configuration config)
{
// new SchemaExport(config).Drop(false, true);
//new SchemaExport(config).Create(true, true);
//If DB File does not exists, create it.
if (!File.Exists(file))
{
Directory.CreateDirectory(Path.GetDirectoryName(databaseFileName));
SqlCeEngine engine = new SqlCeEngine("Data Source="+ file);
engine.CreateDatabase();
// this NHibernate tool takes a configuration (with mapping info in)
// and exports a database schema from it
new SchemaExport(config).Execute(false, true, false);
//FormulasDAO.AddDefaultFormulaCollection();
}
else
{
new …Run Code Online (Sandbox Code Playgroud) 我正在重命名我的数据库并在show database中创建一个旧名称的数据库已存在错误.
use master
ALTER DATABASE DATABASE1
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE DATABASE1
MODIFY NAME = [DATABASE1_DELETED]
ALTER DATABASE DATABASE1_DELETED
SET MULTI_USER
Run Code Online (Sandbox Code Playgroud)
现在查询正确执行并重命名了数据库,但我再次尝试使用旧名称创建数据库,如下所示:
IF DB_ID('DATABASE1') IS NULL
CREATE DATABASE [DATABASE1]
Run Code Online (Sandbox Code Playgroud)
现在它显示一个错误:
消息5170,级别16,状态1,行1
无法创建文件'C:\ Program Files\Microsoft SQL Server\MSSQL10_50.EASYDIRECT\MSSQL\DATA\DATABASE1.mdf',因为它已经存在.更改文件路径或文件名,然后重试该操作.
Msg 1802,Level 16,State 4,Line 1
CREATE DATABASE失败.无法创建列出的某些文件名.检查相关错误.
如何使用旧名称创建数据库?