我想使用我在 C# CLR 中开发的代码在系统上的所有数据库中使用,这样我就不必将每个数据库都设置为可信赖的并打开 CLR 并在每个数据库中保留一堆相同的代码.
从管理和安全的角度来看,有没有最好的方法来做到这一点?CLR 函数非常基础,如字符串断路器、电子邮件验证、url 编码/解码、base64 等。我希望每个数据库中只有 dbo 模式能够访问这些函数。
谢谢
想象一下“突发”的数据流,即它可能有 10,000 个事件非常快地到达,然后一分钟内什么也没有。
您的专家建议:我如何为 SQL Server 编写 C# 插入代码,以保证 SQL 立即将所有内容缓存在其自己的 RAM 中,而不会阻塞我的应用程序超过将数据输入到所述 RAM 所需的时间?为了实现这一点,您是否知道设置 SQL 服务器本身的任何模式,或者设置我正在写入的单个 SQL 表的模式?
当然,我可以做我自己的版本,这涉及在 RAM 中构建我自己的队列 - 但我不想重新发明旧石器时代的石斧,可以这么说。
我们真的需要 C# 中的事务处理以及双方的数据库存储过程吗?
C#:
Using(transaction with transaction scope)
{
Execute stored proc;
Transaction. Complete;
}
Run Code Online (Sandbox Code Playgroud)
SQL存储过程:
Create process
As
Begin try
Begin transaction
Commit
End try
Begin catch
Rollback
End catch
Run Code Online (Sandbox Code Playgroud) 我需要在 SQL Server CLR 的触发器 c# 代码中使用第三方 DLL
但是当我尝试添加引用时,它只显示来自 SQL Server 的一些 DLL。
如何将我的第三方 dll添加到 SQL Server?
我必须开发一个 CMS,它将支持两种语言英语,阿拉伯语。这个 CMS 将是一种文章发布站点。在设计和分析时,我发现有些文章的长度超过 8000 个字符。我的表有一些列
PageID int,
PageTitleEnglish nvarchar(200),
PageTitleArabic nvarchar(200),
PageDescEnglish nvarchar(500),
PageDescArabic nvarchar(500),
PageBodyEnglish nvarchar(max)
PageBodyArabic nvarchar(max)
Run Code Online (Sandbox Code Playgroud)
如果我将 PageBody 保留为nvarchar(4000),那么我限制为 4000 个字符,如果我必须存储阿拉伯语版本,那么我需要 16000 个字节(因为阿拉伯语是 Unicode,比 ASCII 多 3 倍的空间)。
所以我只剩下将PageBody定义为 nVarchar(max) 的选项,从性能的角度来看,这将是不利的。我的实际问题是,如果 PageBody 列中的某些数据少于 4000 个字符,MS SQL Store 会比内联列中的数据或单独在数据库中的数据存储。
我也在谷歌上寻找过这个,但没有找到任何相关的答案以及在这种情况下我如何提高性能。
欢迎对这种多语言 CMS 设计的最佳实践提出任何建议。
我只需要支持两种语言阿拉伯语和英语
我有一个旧系统,表中有大约 1000 万行。在该表中有一个 type 列text
,其中大部分是标准文本,但大约 50 万行中有 RTF 标记。我需要将 RTF 格式的文本转换为纯文本。
我当前的方法是我有一个 C# 程序,它使用 a 将查询加载到 DataTable 中,SqlDataAdapter
并使用 winformsRichTextBox
控件进行转换。
void bw_DoWork(object sender, DoWorkEventArgs e)
{
count = 0;
rtbRTFToPlain = new RichTextBox();
using (SqlDataAdapter ada = new SqlDataAdapter("select note_guid, notes from client_notes", Globals.SQLConnectionString))
using(SqlCommandBuilder cmb = new SqlCommandBuilder(ada))
{
DataTable dt = new DataTable();
ada.UpdateCommand = cmb.GetUpdateCommand();
ada.Fill(dt);
int reportEvery = dt.Rows.Count / 100;
if (reportEvery == 0)
reportEvery = 1;
foreach (DataRow row …
Run Code Online (Sandbox Code Playgroud) 我必须使用最快的方式一次将一堆记录(500,000)插入到数据库中。我试过一次插入1,700条记录,但花了 20 分钟!!我正在使用SQL-SERVER
, 和C#
.
尽管下表不会对快速插入技术做出贡献,但我还是决定将其链接起来,以便您更好地了解我需要插入的字段数量(将其复制大约500K)。
我有一个(.Net 控制台应用程序)EXE,它使用带有适当凭据的 SQL 服务器身份验证连接到各种 SQL 数据库。现在需要在 EXE 中进行更改才能使用 Windows 身份验证并使用网络凭据登录 SQL 服务器。(所有 SQL 服务器都在不同的位置)我有网络凭据,但我很困惑如何使用这些连接到远程 SQL 服务器并从中检索数据。请帮忙。
在我们的应用程序中,我们使用的是 TransactionScope。我们的目标是不使用 MSDTC 服务,因为它比轻量级事务慢很多。
using (var transactionScope = new TransactionScope())
{
...
transactionScope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
当连接到测试数据库时,我们不需要 MSDTC,但在同一台机器上执行的完全相同的代码在连接到生产或开发数据库时升级为使用 MSDTC。
开发数据库不是集群的,也不是命名实例。
所有都是 SQL Server 2008 (10.50.2500) 并且连接字符串完全相同,除了主机名。
数据库的设置似乎必须有所不同。关于这可能是什么的任何想法?
编辑
该事务用于保护两个不同表中的插入。我注意到还有两个调用导致了两个选择。这些不需要在交易中,所以我将它们移到了它之外。然后,所有三个数据库中都不再需要 MSDTC。问题解决了,但不知道是什么原因造成的。
我正在从 CLR 存储过程调用 T-SQL 存储过程。并且THROW
T-SQL 中的语句在不进入catch
块的情况下停止 CLR 的执行。是否可以在我的代码中更改某些内容以导致 CLR 过程执行该catch
块?
T-SQL:
CREATE TABLE t1 (ID INT PRIMARY KEY clustered);
CREATE TABLE t2 (ID INT CONSTRAINT fk_1 FOREIGN KEY REFERENCES t1(ID))
GO
CREATE PROC dbo.TestThrow
AS
BEGIN
BEGIN TRY
INSERT INTO t2 VALUES (1)
END TRY
BEGIN CATCH
THROW
END CATCH
END
GO
Run Code Online (Sandbox Code Playgroud)
克莱尔:
public static void TestThrow()
{
String query = "EXEC DBO.TESTTHROW";
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
try
{ …
Run Code Online (Sandbox Code Playgroud)