在我的winforms应用程序中,我在本地级别散列连接字符串.
但这里有几个问题.
我的应用程序解密连接字符串后,连接字符串信息以明文形式发送?既然我的应用程序是在本地安装的,那么中间人可能是任何用户?
我如何保护连接字符串,因为"强制加密"选项需要额外的证书?
在回答上一个问题时,有人建议:
让SqlConnection成为你的类的成员变量,但是当类处理时,使类IDisposable并处理SqlConnection
我已经把这个建议的实现放在一起(下面)但是想检查一下这个实现是否正确(显然它除了打开连接之外当前没有做任何事情但是想法是那里会有使用连接的方法哪个能够依赖现有的和开放的.
public class DatabaseRecord : IDisposable
{
protected SqlConnection connection;
public DatabaseRecord()
{
connection = new SqlConnection("ConnectionString");
connection.Open();
}
// IDisposable implementation
private bool disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
connection.Dispose();
}
disposed = true;
}
}
// Destructor
~DatabaseRecord()
{
Dispose(false);
}
}
Run Code Online (Sandbox Code Playgroud)
这会有用吗?使用DatabaseRecord实例的类是否需要执行任何特殊操作,或者一旦不再使用/引用实例,是否会自动调用Dispose?这比using (var connection = new SqlConnection("...")) { }在需要连接的每个单独方法体中使用更有效/更好吗?
问候,我想问一下,如果创建Singleton只有一个与db的活动连接是个好主意.我想做的是:1)我有一个wcf服务2)wcf服务从db获取数据3)我想创建一个这样的单例只有一个连接到db:
private static PersistanceSingleton _Instance;
public static PersistanceSingleton Instance
{
get
{
if (_Instance == null)
{
_Instance = new PersistanceSingleton();
}
return _Instance;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是一个理想的单身人士,但我只是为了这个后期目的写了它.我想在这里有一些持久性存储库,我将在构造函数中实例化它们.在我的服务类中,我将在构造函数中包含以下代码
_DBPersistanceSingleton = PersistanceSingleton.Instance;
Run Code Online (Sandbox Code Playgroud)
然后当一些请求到来时(例如GetUsersRequest)我想做类似的事情:
_DBPersistanceSingleton.GetUsers()
Run Code Online (Sandbox Code Playgroud)
在每次调用db之前,我还将检查SqlConnection是否打开.如果这是一个很好的做法,请告诉我.我之所以考虑这个解决方案,是因为大量用户将通过客户端应用程序连接到该服务
我有这段代码:
SqlConnection conn;
string strconString = System.Configuration.ConfigurationManager.ConnectionStrings["SQLCONN"].ToString();
conn = new SqlConnection(strconString);
string cmdstr = "select status from racpw where vtgid = " + vtgid;
SqlCommand cmdselect = new SqlCommand(cmdstr, conn);
conn.Open();
SqlDataReader dtr = cmdselect.ExecuteReader();
if (dtr.Read())
{
return;
}
else
{
...
}
dtr.Close();
conn.Close();
Run Code Online (Sandbox Code Playgroud)
现在我的问题是.如果返回,我的连接和dtr是自动关闭还是我应该使用bool变量并在我的连接关闭后执行返回?
我有一个分布式事务上下文使用ServiceDomain.在其中,我打开一个带有连接字符串指定的SQL连接Enlist=false,这样它就不会自动登记在事务中.然后,如果我在分布式事务中手动登记连接EnlistDistributedTransaction,则连接不会关闭,这可以以以下结尾InvalidOperationException:
超时已过期.从池中获取连接之前经过的超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小.
请尝试以下方法:
try
{
var configuration = new ServiceConfig
{
Transaction = TransactionOption.Required,
TransactionTimeout = 1000
};
ServiceDomain.Enter(configuration);
for (var i = 0; i < 500; ++i)
{
Console.WriteLine(i);
using (var conn = new SqlConnection("Data Source=localhost;Initial Catalog=dotest;Integrated Security=SSPI;Enlist=False;"))
{
conn.Open();
if (i % 2 == 0) conn.EnlistDistributedTransaction((ITransaction) ContextUtil.Transaction);
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO [Test]([ID]) VALUES(@num)";
cmd.Parameters.AddWithValue("@num", i);
cmd.ExecuteNonQuery();
}
}
}
ContextUtil.SetAbort();
}
finally …Run Code Online (Sandbox Code Playgroud) .net sql-server connection-string sqlconnection distributed-transactions
我一直在创建一些 power shell 脚本,并且我主要使用 Invoke-Sqlcmd 作为查询数据库或输入 .sql 文件的一种方式,但是我在包含访问和终止进程方面遇到了一些麻烦。
我一直在使用 SMO 来终止进程
$SQlSvr1 = New-Object Microsoft.SqlServer.Management.Smo.Server $serverInstance
$SQlSvr1.KillAllprocesses($databaseMain)
Run Code Online (Sandbox Code Playgroud)
然后使用 Invoke-Sqlcmd 运行我的进程,一切运行良好,直到我开始收到诸如
A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
Run Code Online (Sandbox Code Playgroud)
如果我没有终止进程,它会返回
无法获得独占访问权限,因为数据库正在使用中。
所以我的问题是,重新生成或保持稳定连接的最佳过程是什么?我不会将所有内容更改为 SMO 或 SQLConnection,或者是否有办法使用 Invoke-Sqlcmd 建立单个连接,但每次我都会杀死/重新排队使用调用。
有问题的脚本首先备份我的数据库,使用 try/catch 中的补丁脚本运行和更新,如果有错误,脚本将在 catch 中备份,所有使用 Invoke-Sqlcmd 除了终止进程。
我们正在尝试将现有SQL Server/SSRS配置部署到一组新硬件.SSRS与我们尝试从中获取报告的SQL Server数据库在同一服务器上运行.
每当我们尝试测试任何报告时,都会收到错误:
报告处理期间发生错误.(rsProcessingAborted)无法创建与数据源'sqlConnection'的连接.(rsErrorOpeningConnection)建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供程序:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接
我完全失去了.
我一直在寻找这个问题的解决方案,唯一可能提供解决方案的是我唯一没有尝试过的解决方案,因为它涉及到更改系统属性.如果可以,我想避免这样做.
连接字符串是正确的,但它仍然无法连接.
例外情况发生在第30行,即连接字符串打开的位置. conn.Open()
这是代码:
using System.Text;
using System.Data.SqlClient;
namespace My_Sql_Program
{
class Program
{
static void Main()
{
try
{
// Step 1: Create a SqlConnection Object to connect to the
// SQL Northwind database.
SqlConnection conn = new SqlConnection("server=localhost;database=dcim;uid=root;pwd=LlmD62jL");
// Step 2: Create a SqlCommand object.
SqlCommand cmd = conn.CreateCommand();
// Step 3: Set the CommandText property of the SqlCommand object to a
// SQL SELECT statment that retrieves a row from the Customers table.
cmd.CommandText = "SELECT …Run Code Online (Sandbox Code Playgroud) 这可能是我的误解,但我确实有很大的问题.请考虑以下代码:
static void Main(string[] args)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
int i = 10;
con.Close();
con.Dispose();
}
int y = 10;
}
Run Code Online (Sandbox Code Playgroud)
在线int y = 10,放置一个断点.
现在,转到SQL Server并右键单击与connectionString上面代码相同的SQl Connection ,然后选择"Activity Monitor".运行上面的代码并检查SQL Server活动监视器.当con.Open()被执行时,活动监视器显示,连接已经完成.到现在为止还挺好!但是当光标到达指示的行时int y = 10;,活动监视器仍会显示不应存在的连接!因为我关闭它,我处理了它,甚至我也通过了使用声明.
有谁知道如何关闭连接?
我有以下代码:
SqlConnection Connect = new SqlConnection(IST_DBConnect.SQLConnectionString);
SqlCommand command = new SqlCommand(sqlCommandString, Connect);
RequestRow Result = new RequestRow();
Connect.Open();
using (Connect)
...
Run Code Online (Sandbox Code Playgroud)
这不是我的代码,我会在using语句中编写SQL Connection的创建,这是我朋友的代码,如果在运行中出现问题,我不确定这是否可以正确处理SQL连接对象。构造函数或Open方法中。所以我的问题是,如果创建了连接对象,并且open方法抛出异常=>连接从未打开,是否可以正确处理?
谢谢。
sqlconnection ×10
c# ×5
sql-server ×5
.net ×3
sql ×3
exception ×1
idisposable ×1
mysql ×1
powershell ×1
reporting ×1
singleton ×1
smo ×1
sqlcmd ×1
winforms ×1