1

所以我有以下方法:

  public void dataSchreiben(Messdaten data)
    {
        try
        {
            var ctxMess = new MessdatenDataContext();
            var messSchreiben = new Messdaten()
            {

                stromschwSoll = data.stromschwSoll,  
                stromscwIst = data.stromscwIst, 

                stromMaxSoll = data.stromMaxSoll, 
                stromIst = data.stromIst,       

                drehzahl = data.drehzahl,       

                sollwerDrehmMaxon = data.sollwerDrehmMaxon,
                istwertDrehmMaxonDR1 = data.istwertDrehmMaxonDR1,
                istwertDrehmMaxonDR2 = data.istwertDrehmMaxonDR2,

                rueckdrehmSollImLauf = data.rueckdrehmSollImLauf,
                ruedrehmIstImLaufDR1 = data.ruedrehmIstImLaufDR1,
                ruedrehmIstImLaufDR2 = data.ruedrehmIstImLaufDR2,

                ruedrehmSollLosbrechen = data.ruedrehmSollLosbrechen,
                ruedrehmIstLosbrDR1 = data.ruedrehmIstLosbrDR1,
                ruedrehmIstLosbrDR2 = data.ruedrehmIstLosbrDR2,

                sollwVerdrspGetriebe = data.sollwVerdrspGetriebe,
                istwVerdrspGetriebe = data.istwVerdrspGetriebe,

                sollVerdrehspGeber = data.sollVerdrehspGeber,
                istwVerdrehspGeber = data.istwVerdrehspGeber,

                serialNummer = "Succes" 


            };
            ctxMess.Messdaten.InsertAllOnSubmit(messSchreiben);
            try
            {
                ctxMess.SubmitChanges();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                ctxMess.SubmitChanges();
            }

        }catch {
            MessageBox.Show("Schreiben error !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

    }

我有一个数据库,其中包含 21 个字段(一个索引 autoincremetable 和一个时间戳)。Messdaten 数据是一个包含以下字段的结构。InsertAllOnSubmit 会返回此错误:

System.Data.Linq InsertAllOnSubmit (System.Collections.IEnumerable) 的类型参数-。方法不能通过从语法中推断出来。显式输入类型参数

另外,我的变量是双精度类型的,而在数据库中它们保存为浮点数。这会产生问题还是其他原因?我在谷歌上搜索,但没有找到解决方案。

public struct Messdaten                 //a structure containing all the elements of the measurements
    {

        public double stromschwSoll;
        public double stromscwIst;

        public double stromMaxSoll;
        public double stromIst;

        public double drehzahl;

        public double sollwerDrehmMaxon;
        public double istwertDrehmMaxonDR1;
        public double istwertDrehmMaxonDR2;

        public double rueckdrehmSollImLauf;
        public double ruedrehmIstImLaufDR1;
        public double ruedrehmIstImLaufDR2;

        public double ruedrehmSollLosbrechen;
        public double ruedrehmIstLosbrDR1;
        public double ruedrehmIstLosbrDR2;

        public double sollwVerdrspGetriebe;
        public double istwVerdrspGetriebe;

        public double sollVerdrehspGeber;
        public double istwVerdrehspGeber;

        public string serialNummer;
    }
    public Messdaten aktMessung;

和数据库声明:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Messdaten")]
public partial class Messdaten : INotifyPropertyChanging, INotifyPropertyChanged
{

    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

    private int _Index;

    private System.Nullable<System.DateTime> _TimeStamp;

    private System.Nullable<double> _StromschwSollLastlos;

    private System.Nullable<double> _StromschwIstLastlos;

    private System.Nullable<double> _StromMaxSollLastlos;

    private System.Nullable<double> _StromMaxIstLastlos;

    private System.Nullable<double> _DrehzahlMaxonmotor;

    private System.Nullable<double> _SollwertDrehmMaxon;

    private System.Nullable<double> _IstwertDrehmMaxonDR1;

    private System.Nullable<double> _IstwertDrehmMaxonDR2;

    private System.Nullable<double> _RueckdrehmSollImLauf;

    private System.Nullable<double> _RuedrehmIstImLaufDR1;

    private System.Nullable<double> _RuedrehmIstImLaufDR2;

    private System.Nullable<double> _RuedrehmSollLosbrechen;

    private System.Nullable<double> _RuedrehmIstLosbrDR1;

    private System.Nullable<double> _RuedrehmIstLosbrDR2;

    private System.Nullable<double> _SollwVerdrspGetriebe;

    private System.Nullable<double> _IstwVerdrspGetriebe;

    private System.Nullable<double> _SollVerdrehspGeber;

    private System.Nullable<double> _IstwVerdrehspGeber;

    private string _SerialNummer;

错误:重载 System.Data.Linq.Table InsertOnSubmit 的最佳匹配(STW_PruefStand.Messdaten -. has not some invalid method

1 - 参数:不能从 'STW_PruefStand.Form1.Messdaten "in" "STW_PruefStand.Messdaten" 转换

4

2 回答 2

3

InsertAllOnSubmit用于插入数据库的对象集合。在这里你只处理一个对象,所以正确的使用方法是InsertOnSubmit

ctxMess.Messdaten.InsertOnSubmit(messSchreiben);

更新。问题更新后,新问题似乎与命名有关。struct 和 context 类都有 names Messdaten,这是误导性的。例如,这一行:

var messSchreiben = new Messdaten()

实例化类型STW_PruefStand.Form1.Messdaten的对象(结构),而根据方法的逻辑它应该是上下文类。尝试明确指定命名空间:

var messSchreiben = new STW_PruefStand.Messdaten()
{
...
于 2013-07-31T11:27:12.903 回答
0

您应该使用InsertOnSubmit(),因为您只添加一个对象

有关差异,请参阅MSDN链接InsertOnSubmit()InsertAllOnSubmit()

于 2013-07-31T11:30:16.660 回答