Tag: sql server

如何计算C#中的SQL Server(hashbytes(’SHA1’,))的等价物?

在我的数据库中,我有一个计算列,其中包含一个名为URLString的列的SHA1哈希值,该列保存URL(例如“http://xxxx.com/index.html”)。 我经常需要查询表以根据URLString列查找特定的URL。 该表包含100K,这些查询需要几秒钟(使用SQL Azure)。 由于URL可能很长,我无法在此列上创建索引(大于450字节)。 为了加快速度,我想从C#计算SQL Server哈希字节(’SHA1’,[URLString])的等效值,并根据该值进行查询。 我尝试了下面的代码,但是我获得的值与数据库计算的值不同。 var urlString = Encoding.ASCII.GetBytes(url.URLString); //UTF8 also fails var sha1 = new SHA1CryptoServiceProvider(); byte[] hash = sha1.ComputeHash(urlString); 我在这里错过了一些小事吗? 我对其他可以解决相同问题的想法持开放态度(只要它们受SQL Azure支持)。 示例:在数据库中,URL http://www.whatismyip.org/的自动计算SHA1值为0xAE66CA69A157186A511ED462153D7CA65F0C1BF7。

SqlParameter不允许表名 – 没有sql注入攻击的其他选项?

我收到一个运行时错误,说”Must declare the table variable “@parmTableName” 。这意味着不允许在sql语句中将表名作为sql参数。 有没有比允许sql注入攻击更好的选择或建议? 我不想为sql语句” DELETE FROM ” + tableName + ” “做这个C#脚本; using(var dbCommand = dbConnection.CreateCommand()) { sqlAsk = “”; sqlAsk += ” DELETE FROM @parmTableName “; sqlAsk += ” WHERE ImportedFlag = ‘F’ “; dbCommand.Parameters.Clear(); dbCommand.Parameters.AddWithValue(“@parmTableName”, tableName); dbConnection.Open(); rowAffected = dbCommand.ExecuteNonQuery(); }

INSERT上的返回ID?

我有一个INSERT查询,我希望DB返回刚刚插入的行的ID。 sqlString = “INSERT INTO MagicBoxes (OwnerID, Key, Name, Permissions, Active, LastUpdated) VALUES (@OwnerID, @BoxKey, @BoxName, 0, 1, @Date) SET @ID = SCOPE_IDENTITY();”; cmd = new SqlCommand(sqlString, con); cmd.Parameters.AddWithValue(“@OwnerID”, OwnerID); cmd.Parameters.AddWithValue(“@BoxKey”, BoxKey); cmd.Parameters.AddWithValue(“@BoxName”, BoxName); cmd.Parameters.AddWithValue(“@Username”, Username); cmd.Parameters.AddWithValue(“@Date”, DateTime.Now); cmd.ExecuteNonQuery(); 我目前有这个,我不确定接下来需要做什么……

执行存储过程时,使用CommandType.StoredProcedure与使用CommandType.Text有什么好处?

所以在C#中使用存储过程我有如下代码(省略连接代码): string sql = “GetClientDefaults”; SqlCommand cmd = new SqlCommand(sql); cmd.CommandType = CommandType.StoredProcedure; //<– DO I NEED THIS?? cmd.Parameters.AddWithValue("@computerName", computerName); 其中sql是存储过程的名称。 现在,这个代码似乎在有和没有注释行的情况下工作得很好。 那么,我需要这条线吗? 设置这个有一些表现(或其他)好处吗? 不设置或将其设置为文本有什么好处?

如何将图像存储到varbinary(max)列?

我在将一个Image插入sql server 2008时遇到了这个以下的SQLexception。 不允许从数据类型nvarchar到varbinary(max)的隐式转换。 使用CONVERT函数运行此查询 在数据库中,Image列的数据类型是Varbinary(MAX)。 编辑 代码解除了评论 paramaters.Add(getParam(“@imageFilePath”, DbType.AnsiString, imageFilePath));

无法更新数据库.MDF是只读的

我有一个应用程序中的本地数据库。 当我在另一台机器上安装它时,我收到错误 无法更新数据库.. .ddf是只读的。 通过编辑我对.mdf和日志文件的权限,我能够绕过它。 我做了一些研究,发现我可能想将数据库安装到共享文件夹中。 但是,我不知道该怎么做,我遇到的答案并没有多大意义。 //My connection string SqlConnection con = new SqlConnection(@”Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|AssetDatabase.mdf;Integrated Security=True”); 任何指导将不胜感激。 我在学习。

以编程方式生成SQL代码

我通过右键单击数据库,通过在任务菜单中生成脚本手动生成脚本 。 现在我的问题是通过c#代码生成该脚本… 我的问题是 是否可以通过c#代码生成? 给我一些提示才能完成? 等待您宝贵的建议和命令。

Round .NET DateTime毫秒,因此它可以适合SQL Server毫秒

我想将datetime值转换为我将从SQL Server 2008获得的值。 SQL Server将毫秒截断为3位数,因此我已经截断了毫秒数。 但问题是,正如您在此处看到的: 从XML转换为SQL Server datetime时,毫秒错误 。 SQL Server也存在精度问题。

无法连接到VS2012中的localDB – “建立与SQL Server的连接时出现与网络相关或特定于实例的错误…”

这很奇怪,因为我能够通过SSMS 2008R2使用相同的连接字符串连接到localDB(“ Data Source=(LocalDB)\v11.0;Integrated Security=true ”) 只有C#代码无法连接,我尝试使用Connect Timeout=60增加登录时间,但没有运气。 我也尝试过指定数据库Initial Catalog=<databasename> 其中是我通过ssms在localdb上创建的。 关于为什么这不连接的任何指针?

批量插入Sql Server数百万条记录

我有一个Windows服务应用程序,它接收具有以下格式的数据流 IDX|20120512|075659|00000002|3|AALI |Astra Agro Lestari Tbk. |0|ORDI_PREOPEN|12 |00000001550.00|00000001291.67|00001574745000|00001574745000|00500|XDS1BXO1| |00001574745000|›§ IDX|20120512|075659|00000022|3|ALMI |Alumindo Light Metal Industry Tbk. |0|ORDI |33 |00000001300.00|00000001300.00|00000308000000|00000308000000|00500|–U3—2| |00000308000000|õÄ 这个数据有数百万行,顺序为00000002….00198562 ,我必须根据序列将它们解析并插入到数据库表中。 我的问题是,将这些数据插入我的数据库的最佳方式(最有效)是什么? 我试图使用一个简单的方法来打开一个SqlConnection对象然后生成一个SQL插入脚本字符串,然后使用SqlCommand对象执行该脚本,但是这个方法花了太长时间。 我读过我可以使用Sql BULK INSERT但它必须从文本文件中读取,这个场景是否可以使用BULK INSERT? (我之前从未使用过它)。 谢谢 更新:我知道SqlBulkCopy,但它要求我首先使用DataTable,这对性能有好处吗? 如果可能的话,我想直接从我的数据源插入到SQL Server,而不必在内存DataTable中使用。