我正在编写一个使用SQL CE的Windows移动应用程序。当我包含WHERE Barcode = @Barcode
语句时,它不会返回任何行。
我猜这是因为Barcode的值后面有尾随空格。所以我想使用WHERE rtrim(Barcode) LIKE @Barcode
。但它给了我一个SqlCeException
说“该函数的指定参数值无效。”
我确定我在这里错过了一些愚蠢的东西。非常感谢任何帮助。
这是我的代码:
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 rtrim(Barcode) LIKE @Barcode";
cmd.Parameters.Add(param);
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);
}
}
}
}
答案 0 :(得分:4)
问题是您不能RTRIM NTEXT或TEXT列。这也适用于标准SQL Server。
您必须先将其转换为NVARCHAR:
SELECT Location, Reading FROM Main2 WHERE rtrim(CONVERT(NVARCHAR, Barcode)) LIKE @Barcode
答案 1 :(得分:0)
SqlCE支持rtrim
,因此这不应该是你的问题。你真的需要在这里做LIKE
吗?如果将LIKE
替换为=
?
答案 2 :(得分:0)
你不能替换它:
cmd.CommandText = "SELECT Location, Reading FROM Main2 WHERE rtrim(Barcode) LIKE @Barcode";
这个(注意我删除了rtrim):
cmd.CommandText = "SELECT Location, Reading FROM Main2 WHERE Barcode LIKE @Barcode";
然后这个:
param.Value = textBarcode.Text.Trim();
有了这个(添加通配符,所以LIKE可以匹配它):
param.Value = textBarcode.Text.Trim() + "%";