我有一个表,其中包含为 FileStream 启用的字段,并且它正确保存了信息。
使用 Microsoft 指南(text)指示的代码,我可以检索 local 服务器上的文件信息。一旦我使用 SqlConnection 连接到远程服务器(使用 IP 地址),就会出现一条错误消息,指出“用户名或密码不正确”。
下面是我正在分析的代码。
SqlConnection sqlConnection = new SqlConnection("Integrated Security=true;Password=sensure;User ID=sa;Initial Catalog=DataTest;Data Source=" + "192.168.1.122" + "\\SQLEXPRESS" + ";MultipleActiveResultSets=True;encrypt=false");
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
...
sqlConnection.Open();
sqlCommand.CommandText = "SELECT RawImage.PathName()"
+ " FROM DEFECTS";
String filePath = null;
Object pathObj = sqlCommand.ExecuteScalar();
if (pathObj != DBNull.Value)
{
filePath = (string)pathObj;
}
else
{
throw new Exception("Get PathName FAILED!");
}
SqlTransaction transaction = sqlConnection.BeginTransaction("mainTransaction");
sqlCommand.Transaction = transaction;
sqlCommand.CommandText = "SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()";
Object obj = sqlCommand.ExecuteScalar();
byte[] txContext = (byte[])obj;
SqlFileStream sqlFileStream = new SqlFileStream(filePath, txContext, FileAccess.ReadWrite, FileOptions.None, 0);
有人知道我该如何解决这个问题吗?
有一个何时在连接字符串中使用集成安全选项的指南。从连接字符串中删除“集成安全性”。它会解决你的问题。并检查数据库服务器中的 SQL Server 身份验证模式以确认允许使用哪种身份验证模式。
连接字符串中的 Integrated Security=true(或 Windows 上的 Integrated Security=SSPI)用于在连接到 SQL Server 数据库时启用 Windows 身份验证。这意味着用户的 Windows 凭据(用于登录 Windows 帐户的凭据)会自动传递到数据库服务器进行身份验证,而不是在连接字符串中显式指定 SQL Server 用户名和密码。
请在使用 Windows 身份验证模式时使用此选项。使用 SQL Server 身份验证模式时不要使用它:如果 SQL Server 配置为使用 SQL Server 身份验证,则需要在连接字符串中指定用户 ID 和密码。