C # SqlCeException - параметр отсутствует - PullRequest
0 голосов
/ 05 января 2012

У меня есть приложение для Windows Mobile 6, которое я разрабатываю. Он обращается к базе данных SQL Server CE, и я получаю следующую ошибку:

Параметр отсутствует. [Порядковый номер параметра = 1]

Я не слишком часто использовал SQL Server CE, но практически идентичное приложение, использующее SQL Server 2008, выполнило этот код без проблем. Я не могу понять, почему он говорит мне, что параметр отсутствует!

Вот мой код:

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;


namespace ElectricBarcodeApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void buttonStart_Click(object sender, EventArgs e)
        {
            System.Data.SqlServerCe.SqlCeConnection conn = new System.Data.SqlServerCe.SqlCeConnection(
            ("Data Source=" + (System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), "ElectricReading.sdf") + ";Max Database Size=2047")));
            try
            {
                // Connect to the local database
                conn.Open();
                System.Data.SqlServerCe.SqlCeCommand cmd = conn.CreateCommand();

                SqlCeParameter param = new SqlCeParameter();
                param.ParameterName = "@Barcode";
                param.Value = textBarcode.Text.Trim();

                // Insert a row
                cmd.CommandText = "SELECT Location, Reading FROM Main2 WHERE Barcode LIKE @Barcode";
                cmd.ExecuteNonQuery();

                DataTable data = new DataTable();

                using (SqlCeDataReader reader = cmd.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        data.Load(reader);
                    }
                }

                if (data != null)
                {
                    this.dataGrid1.DataSource = data;
                }
            }
            finally
            {
                conn.Close();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            if (ElectricReadingDataSetUtil.DesignerUtil.IsRunTime())
            {
                // TODO: Delete this line of code to remove the default AutoFill for 'electricReadingDataSet.Main2'.
                this.main2TableAdapter.Fill(this.electricReadingDataSet.Main2);
            }
        }
    }
}

Я читал некоторые статьи, в которых говорилось, что эта ошибка может возникать при передаче десятичного знака из-за некоторой ошибки msft, но я не использую данные, содержащие десятичные дроби. Любая помощь с благодарностью!

Ответы [ 3 ]

7 голосов
/ 05 января 2012

Вы должны добавить параметр в команду, должно быть что-то вроде

cmd.Parameters.Add(param);
0 голосов
/ 05 января 2012
   SqlCeParameter param = new SqlCeParameter();                 
   param.ParameterName = "@Barcode";
   param.Value = textBarcode.Text.Trim();
   param.Add(@Barcode); 
0 голосов
/ 05 января 2012

Я догадываюсь (не зная, какой на самом деле ваш SQL текст), что вы забыли вставить свой параметр.

Попробуйте изменить его на что-то вроде этого:

       conn.Open();
            System.Data.SqlServerCe.SqlCeCommand cmd = conn.CreateCommand();

            cmd.Parameters.AddWithValue("@Barcode", txtBarcode.Text.Trim());
            //SqlCeParameter param = new SqlCeParameter();
            //param.ParameterName = "@Barcode";
            //param.Value = textBarcode.Text.Trim();


            // Insert a row
            cmd.CommandText = "SELECT Location, Reading FROM Main2 WHERE Barcode LIKE @Barcode";
            cmd.ExecuteNonQuery();
...