首页 新闻 赞助 找找看

C# LinqToSQL 通过存储过程向SQL Server插入数据错误:未将对象引用设置到对象的实例。

0
悬赏园豆:20 [待解决问题]

我要实现的功能是:程序实时接收不同终端传过来的数据,将接收到的数据保存数据库(不同的终端对应不同的线程)。和数据库有关的操作是通过linqToSQL、存储过程实现的。执行insert操作最高频率为8次/s。程序启动后,有时候运行2、3个小时,有时刚运行没多久就出错,错误如下:

System.Data
未将对象引用设置到对象的实例。
   在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   在 System.Data.SqlClient.SqlConnection.Open()
   在 System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user)
   在 System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()
   在 System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()
   在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   在 System.Data.Linq.DataContext.ExecuteMethodCall(Object instance, MethodInfo methodInfo, Object[] parameters)
   在 PAPS.Database.DB_TerminalDatasDataContext.AddTerminalData(Nullable`1 hardwareID, Nullable`1 timeStamp, Binary vibrationDatas) 位置 c:\Users\stu1\Desktop\PipelinePre-warning System(.Net4.5.1)\PAPS.Database\DB_TerminalDatas.designer.cs:行号 90
   在 PAPS.Database.TerminalDatas.AddTerminalDatas(Int32 hardid, Int32 terminalid, Int32 framecount, Int32 packcount, Int32 hardversion, Int32 samplingrate, DateTime timestamp, Byte[] datas) 位置 c:\Users\stu1\Desktop\PipelinePre-warning System(.Net4.5.1)\PAPS.Database\TerminalDatas.cs:行号 30

……(后面的都是一些对应的堆栈,就不一一列举了)

不知道该问题如何解决,比较着急,请大神们指导啊!!!拜谢!

SherryW的主页 SherryW | 初学一级 | 园豆:134
提问于:2014-06-13 08:41
< >
分享
所有回答(2)
0

未将对象引用设置到对象的实例,这个错误在NET编程中是出现频率几乎是最高的一个。

通常的情况是这样的,你使用了一个对象的属性,语句类似

dim myClass as Textbox

Messagebox.Show(myClass.Text)

由于myClass是Nothing,对Nothing使用.Text就会引发“未将对象引用设置到对象的实例“ 错误。

 

类似你的情况,

有可能是接收的数据为空,或者数据处理后,某个对象为空,你又没有检查,就直接使用了对象属性造成的。

检查函数中每一个有带.的对象,看是否有机会为Nothing(c#中是null)

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-06-13 10:19
0

是不是你的连接被释放了???

幻天芒 | 园豆:37175 (高人七级) | 2014-06-13 14:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册