当您ToByteArray()在.NET中调用GUID时,结果数组中的字节顺序与GUID的字符串表示形式相比不是您所期望的.例如,对于以下表示为字符串的GUID:
11223344-5566-7788-9900-aabbccddeeff
Run Code Online (Sandbox Code Playgroud)
结果ToByteArray()是这样的:
44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF
Run Code Online (Sandbox Code Playgroud)
请注意,前四个字节的顺序是相反的.字节4和5也交换,字节6和7交换.但是最后的8个字节的顺序与它们在字符串中表示的顺序相同.
我知道这种情况正在发生.我想知道的是.NET为什么会这样处理它.
我正在尝试在Windows 7 x64计算机上设置SQL Server 2012 LocalDB(RTM,x64)共享实例,但我似乎无法连接到共享实例.我正在使用管理员命令提示符进行所有设置.这是我创建实例的方式:
sqllocaldb create MyInstance
Run Code Online (Sandbox Code Playgroud)
产生响应:
LocalDB instance "MyInstance" created with version 11.0.
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.现在我分享实例:
sqllocaldb share "MyInstance" "MySharedInstance"
Run Code Online (Sandbox Code Playgroud)
结果如下:
Private LocalDB instance "MyInstance" shared with the shared name: "MySharedInstance".
Run Code Online (Sandbox Code Playgroud)
看起来还不错.此时,我的info命令产生:
.\MySharedInstance
MyInstance
v11.0
Run Code Online (Sandbox Code Playgroud)
使用管理员或非管理员命令提示符从所有者帐户(管理员)连接到实例似乎工作正常.但是,当我以普通用户(不是Windows管理员)身份登录并尝试连接时,事情就会出现问题:
sqlcmd -S (localdb)\.\MySharedInstance
Run Code Online (Sandbox Code Playgroud)
结果是:
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. .
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login timeout expired.
Sqlcmd: Error: Microsoft SQL …Run Code Online (Sandbox Code Playgroud) sql-server sql-server-express sql-server-2012 localdb sql-server-2012-express
我的应用程序使用DataReader在ADO.NET中编写的自定义数据访问层与Oracle和SQL Server数据库进行交互.现在我遇到了GUID(我们用于主键)和Oracle RAW数据类型之间转换的问题.插入oracle很好(我只是在System.Guid上使用ToByteArray()方法).当我从数据库加载记录时,问题是转换回System.Guid.目前,我正在使用从ADO.NET获得的字节数组传递给System.Guid的构造函数.这似乎有效,但数据库中出现的Guids与我以这种方式生成的Guids不对应.
我无法更改数据库架构或查询(因为它重用于SQL Server).我需要代码将Oracle中的字节数组转换为正确的Guid.
我有一个包含2列TableLayoutPanel的用户控件,并接受命令来动态添加行以显示在单独控件中选择的项目的详细信息.因此,用户将在另一个控件(DataGridView)中选择一行,并在DataGridView的SelectedItemChanged事件处理程序中清除详细控件,然后重新生成新选定项的所有行(可能具有完全不同的细节)从先前选择的项目中显示).这很有用.但是如果我长时间从一个选定的项目移动到另一个项目,刷新变得非常慢(每个3-5秒).这听起来好像我没有妥善处理一切,但我无法弄清楚我错过了什么.这是我清除TableLayoutPanel的代码:
private readonly List<Control> controls;
public void Clear()
{
detailTable.Visible = false;
detailTable.SuspendLayout();
SuspendLayout();
detailTable.RowStyles.Clear();
detailTable.Controls.Clear();
DisposeAndClearControls();
detailTable.RowCount = 0;
detailTable.ColumnCount = 2;
}
private void DisposeAndClearControls()
{
foreach (Control control in controls)
{
control.Dispose();
}
controls.Clear();
}
Run Code Online (Sandbox Code Playgroud)
一旦我完成了将我想要的所有控件加载到TableLayoutPanel中以进行下一个细节显示,这就是我所说的:
public void Render()
{
detailTable.ResumeLayout(false);
detailTable.PerformLayout();
ResumeLayout(false);
detailTable.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)
我在TableLayoutPanel中没有使用任何标签(和很少使用TextBox),我在创建它们时将标签和文本框添加到控件列表(在DisposeAndClearControls()中引用).我尝试迭代detailTable.Controls并以这种方式处理它们,但它似乎错过了一半的控件(通过在调试器中逐步执行它来确定).这样我知道我得到了所有.
我会对提高绘图性能的任何建议感兴趣,尤其是导致多次选择降级的原因.