And*_*nda 0 c# sql-server linq-to-sql
我正在努力让这个SP运行:
myDataContext.InsertEvent(codEvent, dateOfEvent, statusOfEvent);
Run Code Online (Sandbox Code Playgroud)
codEvent是一个int; dateOfEvent是一个DateTime; statusOfEvent是一个char.
问题是如果我传递statusOfEvent null,Visual Studio会抛出错误.并且,我的SP像我的桌子一样接受可空的字符.
我也尝试过这样做:
char? statusOfEvent= null;
if (!String.IsNullOrEmpty(f["statusOfEvent"]))
statusOfEvent= Convert.ToChar(f["statusOfEvent"]);
Run Code Online (Sandbox Code Playgroud)
但它也会引发错误......
谢谢!!
我试过这个三元表达式:
!String.IsNullOrEmpty(f["statusOfEvent"]) ? Convert.ToChar(f["statusOfEvent"]) : DBNull.Value
Run Code Online (Sandbox Code Playgroud)
但据说"char和DBNull之间没有隐式转换"
我还查看了'*.dbml'designer.cs文件,我的SP方法有这一行:
[Parameter(DbType="Char(1)")] System.Nullable<char> statusOfEvent
Run Code Online (Sandbox Code Playgroud)
更新
要使用,您可以将它传递给其他可能通过的地方null.因此,假设可以statusOfEvent为空,您可以执行以下操作.
myDataContext.InsertEvent(
codEvent,
dateOfEvent,
statusOfEvent ?? DBNull.Value);
Run Code Online (Sandbox Code Playgroud)
但是,InsertEvent需要接受它作为此参数的有效输入.如果您正在使用某些.NET支持(如XSD数据集)来描述存储过程.您可以修改此改变参数接受char?从char.然后你应该能够通过null,底层系统将为DBNull.Value你转换它.在这种情况下,您可以将呼叫保留为:
myDataContext.InsertEvent(
codEvent,
dateOfEvent,
statusOfEvent);
Run Code Online (Sandbox Code Playgroud)
这也适用于Linq2Sql.要更改Linq2Sql对象中存储过程的表示形式,需要打开dbml并编辑存储过程的属性.
| 归档时间: |
|
| 查看次数: |
2279 次 |
| 最近记录: |