C#报CS0123无匹配RoutedEventHandler重载与CS0136变量冲突如何解决
问题修复方案
1. 修复CS0136报错
这个报错是因为UploadData_Click方法的入参已经用了sender和e作为参数名,后续定义SqlRowsCopied事件的匿名委托时,重复使用了相同的参数名,导致同作用域内变量命名冲突。
直接修改匿名委托的参数名即可,示例:
// 修改前 bcp.SqlRowsCopied += delegate (object sender,SqlRowsCopiedEventArgs e) { Console.WriteLine(e.RowsCopied.ToString("#,##0") + " rows copied."); }; // 修改后 bcp.SqlRowsCopied += delegate (object s, SqlRowsCopiedEventArgs args) { Console.WriteLine(args.RowsCopied.ToString("#,##0") + " rows copied."); };
2. 修复CS0123报错
这个报错是方法签名和RoutedEventHandler委托要求不匹配,按以下两点排查修改:
- 检查MainWindow.xaml第17行绑定的Click事件方法名,确认和你写的
UploadData_Click完全一致,没有拼写错误、大小写偏差 - 确认.cs文件头部已引入
System.Windows命名空间,或者直接把方法的参数类型写全,避免命名空间冲突:
// 全写参数类型避免命名空间引用错误 private void UploadData_Click(object sender, System.Windows.RoutedEventArgs e)
完整修改后代码
// 确保已引入所需命名空间 using System.Windows; using System.Data.SqlClient; using ChoETL; // ChoCSVReader对应的命名空间 private void UploadData_Click(object sender, RoutedEventArgs e) { string connectionstring = @"{serverconnectionstring}"; using (SqlBulkCopy bcp = new SqlBulkCopy(connectionstring)) { using (var p = new ChoCSVReader(mainFile).WithFirstLineHeader()) { bcp.DestinationTableName = "ReceiptDemo"; bcp.EnableStreaming = true; bcp.BatchSize = 10000; bcp.BulkCopyTimeout = 0; bcp.NotifyAfter = 100; bcp.SqlRowsCopied += delegate (object s, SqlRowsCopiedEventArgs args) { Console.WriteLine(args.RowsCopied.ToString("#,##0") + " rows copied."); }; bcp.WriteToServer(p.AsDataReader()); } } }
内容的提问来源于stack exchange,提问作者mully
相关产品推荐
相关产品推荐

