最近在上程序实训课,写一个管理程序,主要是用了C#,在VS2017平台,在开发过程中自然是少不了很多奇怪的问题,做个记录。
有下面几个问题:
问题1:.Conversion failed when converting from a character string to uniqueidentifier.
问题2:ExecuteNonQuery 要求已打开且可用的 Connection。连接的当前状态为已关闭。
问题3:CS0012 类型"Object"在未引用的程序集中定义。必须添加对程序集“mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089”的引用。
目前主要用到的数据库结构如下。
连接数据库的很多错都是报在ID这个特殊的类型上面,也就是唯一标识符uniqueidentifier,在程序中的类型是Guid,但是因为在一个数据库中标识符其实是少不掉的,所以这些问题也绕不开。
问题1:Conversion failed when converting from a character string to uniqueidentifier.
问题背景就是输入的id格式就是一个字符串,然后在查询的时候就会出现问题。为了方便查看,我把问题放到了sql查询中,如下:
Select * from Operator where id='3a9a2894-f9f6-4ffe-b8e6-a67e949f276c'
这个问题困扰了我很久,在程序运行的过程中经常断开,查询了资料是因为什么...已经忘了,具体的解决方案如下:
select * from Operator where id =CAST('3a9a2894-f9f6-4ffe-b8e6-a67e949f276c' AS UNIQUEIDENTIFIER)
问题2:ExecuteNonQuery 要求已打开且可用的 Connection。连接的当前状态为已关闭。
这个问题其实说的方式已经很直接了,但是我也是好几次忘记了,也是卡住了一会。具体的背景就是在连接数据库查询的时候会报错,解决方案就是记得打开连接,就是下面的Open。
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand commUpdate = new SqlCommand(sql, conn);
int n = commUpdate.ExecuteNonQuery();
if (n > 0)
{
flag = true;
}
}
问题3:CS0012 类型"Object"在未引用的程序集中定义。必须添加对程序集“mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089”的引用。
这个错误非常奇怪且诡异,具体表现就是创建的类库在依赖项里面无法引用一些库比如System.Configuration,可能报一些很诡异的错误,反正看看不懂,下面都是可能会出现的
查遍几乎所有相关博客没找到解决方案,后来在一次偶然机会中发现的两种类库的细微差别,仔细看类库其实是有Standard和Framework两种类型的,我一开始创建了Standard,所以很多不兼容,后来改为Framework就没有问题了。如果你也是像我一样,在窗体应用程序里报类似这种错误,那么可以考虑是不是因为创建的类型不太对而导致。