小编Pan*_*vos的帖子

C# Sql ADO.Net DataColumn 添加可为空的 Guid 列时出错

我正在尝试从 C# 调用 sql 存储过程。我有以下代码来创建 DataColumn。但是在添加可为空的 Guid 和 DateTime 类型时创建 DataTable 时出现错误。

DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[]
        {
            new DataColumn(nameof(LearnerEntity.FirstName), typeof(string)),
            new DataColumn(nameof(LearnerEntity.DateOfBirth), typeof(DateTime?)),
            new DataColumn(nameof(LearnerEmployerEntity.SectorId), typeof(Guid?)),
            new DataColumn(nameof(LearnerEntity.EPortfolioId), typeof(int?))
        });
        dt.Rows.Add(
            learnerEntity.FirstName,
            learnerEntity.DateOfBirth ?? SqlDateTime.Null,
            learnerEntity.Employer?.SectorId ?? SqlGuid.Null.Value,
            learnerEntity.EPortfolioId ?? SqlInt32.Null.Value); 
Run Code Online (Sandbox Code Playgroud)

错误是:

DataSet does not support System.Nullable<>. 
Run Code Online (Sandbox Code Playgroud)

谁能帮助我我在这里做错了什么?

我正在尝试以下操作:

DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[]
        {
            new DataColumn(nameof(LearnerEntity.FirstName), typeof(string)),
            new DataColumn(nameof(LearnerEntity.DateOfBirth), Nullable.GetUnderlyingType(typeof(LearnerEmployerEntity).GetProperty("DateOfBirth").PropertyType)),
            new DataColumn(nameof(LearnerEmployerEntity.SectorId), Nullable.GetUnderlyingType(typeof(LearnerEmployerEntity).GetProperty("SectorId").PropertyType)),
            new DataColumn(nameof(LearnerEntity.EPortfolioId), Nullable.GetUnderlyingType(typeof(LearnerEmployerEntity).GetProperty("EPortfolioId").PropertyType))
        });
        dt.Rows.Add(
            learnerEntity.FirstName,
            learnerEntity.DateOfBirth ?? SqlDateTime.Null,
            learnerEntity.Employer?.SectorId ?? …
Run Code Online (Sandbox Code Playgroud)

c# ado.net

1
推荐指数
1
解决办法
758
查看次数

为什么 C# 编译器不调用隐式运算符。编译错误?

考虑以下结构:

struct SomeWrapper
{
    public Guid guid;

    public static implicit operator SomeWrapper(Guid guid) => new SomeWrapper {guid = guid};
}
Run Code Online (Sandbox Code Playgroud)

这个结构定义了一个隐式运算符来处理Guidas SomeWrapper,非常简单。以下所有方法都可以编译,第一个除外PleaseDoNotCompile

static Task<SomeWrapper> PleaseDoNotCompile() => Task.Run(() => Guid.NewGuid());

static Task<SomeWrapper> WhyDoYouCompile() => Task.Run(() =>
{
    return Guid.NewGuid();

    return new SomeWrapper();
});

static SomeWrapper IUnderstandWhyYouCompile() => Guid.NewGuid();

static async Task<SomeWrapper> IUnderstandWhyYouCompileToo() => await Task.Run(() => Guid.NewGuid());
Run Code Online (Sandbox Code Playgroud)

特别是,WhyDoYouCompile只是第一个带有返回SomeWrapper值的附加 return 语句的方法。很明显,返回是无法访问的代码。它仍然编译,而第一个没有。

因此,除了附加的 return 语句之外,这两种方法之间实际上还有另一个区别:PleaseDoNotCompileuses Task.Run<Guid>(Func<Guid> function)While WhyDoYouCompileuses Task.Run<SomeWrapper>(Func<SomeWrapper> function) …

.net c# lambda delegates implicit-conversion

1
推荐指数
1
解决办法
76
查看次数

如何实现DataTable中的搜索(Web应用开发教程)

我对 ABP 框架完全陌生。我遵循了“Web 应用程序开发教程”。现在我想使用数据表中的搜索。在文件“Index.js”中,我将“搜索”设置为“true”,但什么也没有发生。

var dataTable = $('#WordsTable').DataTable(
   abp.libs.datatables.normalizeConfiguration({
   serverSide: true,
   paging: true,
   order: [[1, "asc"]],
   searching: true,
   scrollX: true,
   ...
Run Code Online (Sandbox Code Playgroud)

怎样才能实现搜索呢?
问候,汤姆

asp.net-mvc asp.net-core abp

1
推荐指数
1
解决办法
1781
查看次数

是否可以将Task <T>(带有返回值)传递给现有(即已经运行的)线程

在wpf中,我有两个不同线程的窗口.
从窗口A'在线程中AI想要在窗口B'的Tread B中启动一个任务并等待线程A中的返回值.
它假设它可能但是如何?
你知道一个例子吗?

c# wpf task synchronizationcontext async-await

0
推荐指数
1
解决办法
84
查看次数

在处理大量数据时降低CPU使用率

我正在编写一个实时应用程序,它每秒接收大约2000条消息,这些消息被推入队列中.我编写了一个后台线程来处理队列中的消息.

private void ProcessSocketMessage()
{
    while (!this.shouldStopProcessing)
    {
        while (this.messageQueue.Count > 0)
        {
            string message;
            bool result = this.messageQueue.TryDequeue(out message);
            if (result)
            {
               // Process the string and do some other stuff
               // Like updating the received message in a datagrid  
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上述代码的问题在于它使用了大约12%CPU(2.40 GHz双核处理器)的疯狂处理能力.

我有4个类似于上面的块,它实际上占用了50%的CPU计算能力.在上面的代码中有什么可以优化的吗?

在第二次循环结束之前添加100 ms的线程休眠似乎会使性能提高50%.但我做错了吗?

c# multithreading winforms task-parallel-library tpl-dataflow

0
推荐指数
1
解决办法
455
查看次数

如何反序列化数组?

我正在使用nlohmann :: json库来序列化/反序列化元素json.这是我如何序列化C++double数组:

double mLengths[gMaxNumPoints] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
...
nlohmann::json jsonEnvelope;
jsonEnvelope["lengths"] = envelope.mLengths;
Run Code Online (Sandbox Code Playgroud)

哪个产品:

"lengths":[  
   1.0,
   2.0,
   3.0,
   4.0,
   5.0
]
Run Code Online (Sandbox Code Playgroud)

但现在,我怎样才能反序列化mLengths?试过:

mLengths = jsonData["envelope"]["lengths"];
Run Code Online (Sandbox Code Playgroud)

但它说expression must be a modifiable lvalue.如何恢复阵列?

c++ json nlohmann-json

0
推荐指数
2
解决办法
251
查看次数

如何解决/解决异常未找到框架“ .NETFramework,Version = v4.6.1”的参考程序集?

我尝试加载我拥有的项目并遇到以下异常:

严重性代码说明项目文件行抑制状态错误找不到框架“ .NETFramework,Version = v4.6.1”的参考程序集。要解决此问题,请为此框架版本安装SDK或Targeting Pack,或将您的应用程序重新定位到已为其安装SDK或Targeting Pack的框架版本。请注意,程序集将从全局程序集缓存(GAC)中解析,并将代替参考程序集。因此,您的程序集可能没有正确地针对您想要的框架。

每次我尝试在加载项目时重新加载项目时,都会得到一个窗口:

错误

我不确定要下载什么以及从哪里下载。

而且我无法更改任何项目属性,在所有属性窗口中都出现错误。

.net .net-framework-version visual-studio-2017

0
推荐指数
2
解决办法
2832
查看次数

如何避免用lock语句返回null?

我有一种方法可以并行加载并运行报表布局。所有报告将使用相同的baselayout.xml。由于线程每次尝试访问同一资源时都会因异常而失败,因此我使用了a lock来锁定文件。

public static XmlTextReader LoadReport(string reportName)
{
    object _locker = new object();
    object reportData;
    lock (_locker)
    {
        reportData = Resources.ResourceManager.GetObject(reportName);
    }
    return new XmlTextReader(new MemoryStream((byte[])reportData));
}
Run Code Online (Sandbox Code Playgroud)

并行方法如下所示:

private void RunReportsParallel(List<ReportObject> coverterList)
{
    try
    {
        Parallel.ForEach(coverterList, (currentObject) => {
            currentObject.Convert();
        });    
    }
    catch (Exception e)
    {
        smlLogger.Error(Helper.SetLogLine(e.Message, processId));
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

Conver将运行以下代码:

public override SectionReport GetMainReport()
{
    SectionReport mainReport = new SectionReport();
    XMLDataSource datasource = new XMLDataSource(null, "//AkontoRechnung");
    datasource.LoadXML(rechnungsdaten.ToString());
    mainReport = new ReportAkontorechnung(datasource, reportConfiguration, Language, NoPrintOut);
    try …
Run Code Online (Sandbox Code Playgroud)

c# activereports multithreading xmlreader parallel.foreach

0
推荐指数
1
解决办法
81
查看次数

编译错误:只能将赋值,调用,递增,递减和新对象表达式用作语句

我以前读过:

C#仅赋值,调用,递增,递减和新对象表达式可以用作语句

仅赋值,调用,递增,递减和新对象表达式可以用作语句和; 预期

我写以下内容:

namespace Converter {
      public class Converter
      {
        public string dnaToRna(string dna)
        {
          string rna = "";
          foreach(char letter in dna){
            letter=='T' ? rna+='U' : rna+=letter;
            rna+=letter;
          }
          return rna;
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

当我通过测试调用代码时:

    namespace Converter {
  using NUnit.Framework;
  using System;

  [TestFixture]
  public class Test
  {
    [Test]
    public void test()
    {
      Converter converter = new Converter();
      Assert.AreEqual("UUUU", converter.dnaToRna("TTTT"));
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它说:

src/Solution.cs(9,9): error CS0201: Only assignment, call, increment, decrement, and new object expressions can be …
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
1
解决办法
49
查看次数

为什么这段代码挂在`await TransformBlock.Completion`上

以下代码块 await loader.Completion;

我只是不知道为什么?

using System;
using System.Linq;
using System.Threading.Tasks;
using System.Threading.Tasks.Dataflow;

namespace tests {
    class Program {
        static async Task Main(string[] args) {
            Planner pl = new Planner();
            Console.WriteLine(await pl.Count());
        }
    }

    public class Planner {
        private TransformBlock<int, string[]> loader;
        private int _im = 0;

        public Planner(int im = 5) {
            _im = im;
            loader =
                new TransformBlock<int, string[]>(
                    async i => {
                        Console.WriteLine(i);
                        await Task.Delay(1000);
                        return new string[] { i.ToString() };
                    }
               );
        }

        public async Task<long> Count() …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library tpl-dataflow .net-core

0
推荐指数
1
解决办法
48
查看次数