当我尝试运行以下代码时,我得到从字符串“”转换为类型'Integer'无效。错误。
Dim maj = (From c In connect.Courses _
Where c.COTRequired = CBool("True") _
Select c.CourseID, c.CourseName, c.CreditHours).Except _
(From en In connect.Enrollments _
Join s In connect.Sections On en.SectionID Equals s.SectionID _
Join cs In connect.Courses On s.CourseID Equals cs.CourseID _
Join st In connect.Students On en.StudentID Equals st.StudentID _
Order By cs.CourseName _
Where st.StudentID = CInt(SID) _
Select cs.CourseID, cs.CourseName, cs.CreditHours)
Dim maj2 = (From m2 In maj _
Select m2.CreditHours).Sum().ToString
以下是错误详情。我知道需要进行某种类型的转换,但我很难确定哪一种转换。
System.InvalidCastException未被用户代码处理
Message =“从字符串转换”“到'Integer'类型无效。”
来源= “将System.Data.Linq”
堆栈跟踪:
在System.Data.Linq.SqlClient.QueryConverter.VisitInvocation(InvocationExpression invoke)
at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
在System.Data.Linq.SqlClient.QueryConverter.Visit(表达式节点)
在System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
在System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b)
at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
在System.Data.Linq.SqlClient.QueryConverter.Visit(表达式节点)
在System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
在System.Data.Linq.SqlClient.QueryConverter.VisitWhere(表达式序列,LambdaExpression谓词)
在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
在System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
在System.Data.Linq.SqlClient.QueryConverter.Visit(表达式节点)
在System.Data.Linq.SqlClient.QueryConverter.VisitSelect(表达式序列,LambdaExpression选择器)
在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
在System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
在System.Data.Linq.SqlClient.QueryConverter.Visit(表达式节点)
at System.Data.Linq.SqlClient.QueryConverter.VisitExcept(Expression source1,Expression source2)
在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
在System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
在System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(表达式节点)
at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query,SqlNodeAnnotations annotations)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
在System.Data.Linq.DataQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Collections.Generic.List
1..ctor(IEnumerable 1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1来源)
在System.Data.Linq.Provider.BindingList.Create [T](DataContext context,IEnumerable 1 sequence)
at System.Data.Linq.DataQuery
1.GetNewBindingList()
在System.Data.Linq.DataQuery`1.System.ComponentModel.IListSource.GetList()
在System.Windows.Forms.ListBindingHelper.GetList(对象列表)
在System.Windows.Forms.ListBindingHelper.GetList(Object dataSource,String dataMember)
在System.Windows.Forms.BindingSource.ResetList()
在System.Windows.Forms.BindingSource.set_DataSource(对象值)
at WindowsApplication1.Form1.ComboBox1_SelectedIndexChanged(Object sender,EventArgs e)在C:\ Users \ Charles.McBeth \ Documents \ School \ ProgramManagement \ Final Project \ Final Project \ Final Project \ Form1.vb:第68行
在System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
在System.Windows.Forms.ComboBox.set_SelectedIndex(Int32值)
在System.Windows.Forms.ComboBox.RefreshItems()
在System.Windows.Forms.ComboBox.OnDataSourceChanged(EventArgs e)
在System.Windows.Forms.ListControl.SetDataConnection(Object newDataSource,BindingMemberInfo newDisplayMember,Boolean force)
在System.Windows.Forms.ListControl.set_DataSource(对象值)
InnerException:System.FormatException
Message =“输入字符串的格式不正确。”
来源= “Microsoft.VisualBasic程序”
堆栈跟踪:
在Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value,NumberFormatInfo NumberFormat)
在Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
InnerException:
答案 0 :(得分:3)
我怀疑是这一点:
st.StudentID = CInt(SID)
什么是SID,是否有可能是空字符串?如果 是空字符串,您希望代码做什么?
答案 1 :(得分:1)
我可以看到唯一显式转换为整数CInt(SID)
- SID
字段的类型是什么?如果它包含字母数字值,那可能是您的罪魁祸首。
答案 2 :(得分:0)
我发现LINQ to SQL的局限性难以忍受,所以我开发了自己的数据基础层。但是我发现当我需要使用LINQ to SQL时,它有助于提升代码中的所有计算。
在你的情况下,我会尝试:
Dim intSID = CInt(SID)
Dim maj = ...
Where c.COTRequired = True _
...
Where st.StudentID = intSID _
...
请注意,VB.NET的常量为True和False(无引号),它们是实际的布尔值。