我需要一种安全(即一致,健壮)的方法来检测我正在访问的sql server是否是Sql Express.我想我更愿意从TSQL中做到这一点,因为我已经有一个连接字符串和我需要执行TSQL的所有库(这应该有助于避免WMI是否安装/运行的问题,用户有访问注册表的权限等).
有谁知道这样做的方法?
谢谢.
PS:基本上我想这样做,所以我可以监控我的数据库大小与4gb限制,并在我接近它时采取行动...但如果我在一个完整的Sql Server版本上运行,那么我不希望代码担心它,因为没有(实际)硬编码限制.我可以在我的程序中进行手动设置,但如果代码自动执行正确的操作会更好,因此需要知道服务器是否是"Express"版本.
我正在使用Visual C#2008 Express Edition和SQL Server Express 2008的数据库资源管理器/设计器.
我创建了一个表,并希望添加一个索引.但索引将超过900字节.一种解决方法是在索引中使用包含的列.不幸的是,索引设计器中禁用了"包含的列"属性,但我还没有找到启用它的方法.
有人可以告诉我如何启用该属性?是否有另一种方法可以使用设计器将包含的列添加到索引中?SQL Server Express是否支持此功能?
sql server 2005上的最大限制是4 GB表示.mdf + .ldf或仅用于.mdf吗?请澄清一下.谢谢.
当我使用以下连接字符串运行应用程序时,将成功创建数据库文件.
<add name="ConnString1"
connectionString="Data Source=.\SQLEXPRESS;
Database=Database1;
Integrated Security=SSPI;
AttachDBFilename=|DataDirectory|aspnetdb.mdf;
User Instance=true"
providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
如果我删除数据库文件并尝试再次运行该应用程序,则无法创建数据库文件,并且我得到以下内部异常:
底层提供程序在Open上失败.
{"无法打开数据库\"Database1 \"登录请求.登录失败.\ Database1 \n登录失败,用户'计算机\\ someuser'."}
如果我改变数据库=数据库1到数据库的Database2 =在连接字符串中那么数据库文件创建成功.问题总是重演.
如何在不更改数据库名称的情况下重新创建数据库文件?
我试图远程连接到SQL.我输入了端口1433,我重新启动了服务,而且我的Windows防火墙没有激活.但是,我只能使用本地连接,我无法远程连接.
我读到SQL Server 2005 Express不允许远程连接,但是2008年呢?它是否允许远程连接?
当我已经拥有Microsoft Sql Server Developer(2008)时,我可以从使用Visual Studio(2010)安装Sql Express获得什么好处?
我可以想象的唯一好处是我可以为任何一个平台开发,而不必关心我安装的是哪一个.从我的开发机器中删除 Sql Server Express(特别是SqlExpress实例)是否存在实际的负面损害?
使用带有SQL Server Express .mdf数据库的Entity Framework 4.1 .
出于测试目的,我尝试在WPF应用程序中使用实体模型在SQL Server Express数据库上执行CRUD操作.
我是这个概念的新手,我按照视频教程进行了编码
我创建了单个非常简单的表的实体模型.我在cs文件中编写了简单的代码,使用以下代码执行向数据库添加一行
testEntities db = new testEntities();
TestTable tb = new TestTable();
tb.Name = txtName.Text;
tb.Email = txtMail.Text;
db.TestTables.AddObject(tb);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
但如果我回去检查数据库,则不会添加任何数据.请告诉我这里出了什么问题?
这是我的连接字符串
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="testEntities"
connectionString="metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\test.mdf;integrated security=True;connect timeout=30;user instance=True;multipleactiveresultsets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我在.Net应用程序内存使用方面遇到了很大的不同,使用相同的应用程序对同一个数据库的两个副本.唯一的区别是在方案1中我使用注册到实例的数据库的本地副本SQL Server 2005 Express- 并且在方案2中我使用注册到实例的数据库的远程副本SQL Server 2008 Enterprise.
据我所知,我只期望SQL性能和SQL内存使用有所不同(因为Express有1GB的限制).
但是 - 我看到它们之间的内存使用量存在巨大差异(1GB) - 即SQL Express主要使用1GB内存的情况. SQL Express似乎也慢得多,特别是使用大表和大型查询 - 但我希望这个内存命中是在SQL而不是我的消费/客户端应用程序???
应用程序使用System.Data.SqlClient.SqlConnection并连接到SQL服务器并执行频繁SqlCommand和SqlBulkCopy操作.
任何有用的想法将非常感谢!
如何在新的Windows 7计算机上通过命令行安装SQL Server 2014 Express?
我尝试了以下命令行; 虽然没有显示错误,但我没有看到任何运行或安装的SQL服务.那有什么不对呢?任何的想法?
SQLEXPRESS.EXE /qs /ACTION=Install /FEATURES=SQLEngine
/INSTANCENAME=SQLEXPRESS
/SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE"
/SQLSVCPASSWORD="STR0NGP@$$"
/SQLSYSADMINACCOUNTS="NT AUTHORITY\NETWORK SERVICE"
/AGTSVCACCOUNT="NT AUTHORITY\Network Service"
/TCPENABLED=0 /X86="True" /SQMREPORTING="False"
/ISSVCSTARTUPTYPE="Automatic"
/ASCOLLATION="Latin1_General_CI_AS"
/SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
/RSINSTALLMODE="FilesOnlyMode"
/IACCEPTSQLSERVERLICENSETERMS
Run Code Online (Sandbox Code Playgroud) 我在SQL Server Express与字段的表name varchar(10)和timeVar time我要保存的值QTime的变量time场.
这是我尝试过的:
QTime time = QTime::currentTime();
QString timeString = time.toString("hh:mm:ss");
QString query = QString("insert into timeHold(name,timeVar) values ('ABC','%2')").arg(timeString);
qry->prepare(query);
qry->exec();
Run Code Online (Sandbox Code Playgroud)
但是,我明白了QSqlQuery::value: not positioned on a valid record.
当我从SQL Server Management Studio将值插入表中时,insert into timeHold values('XYZ', '12:17:35')效果很好.令我惊讶的是,当我尝试从管理工作室读取存储在表中的值时,我能够获得名称字段,但不能获得时间字段.
这是我用来从表中读取值的代码:
QString query = QString("select * from timeHold");
qry->prepare(query);
qry->exec();
qry->first();
int noOfRecords = qry->numRowsAffected();
do {
qDebug() << qry->value(0).toString();
qDebug() << qry->value(1).toString();
} while (qry->next());
Run Code Online (Sandbox Code Playgroud)
代码生成以下输出:
"ABC"
"\u0017" …Run Code Online (Sandbox Code Playgroud)