Типы данных ntext и nvarchar несовместимы в операторе равенства
У меня есть проблема, и я не знаю, как ее исправить.
У меня есть простая таблица в базе данных
CREATE TABLE [dbo].[home] (
[Id] INT NOT NULL,
[text] NTEXT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
Я использую FormView в Visual Studio 2012. FormView связан с домашней таблицей базы данных и имеет опции редактирования / обновления / удаления.
Проблема в том, что когда я пытаюсь обновить текст в базе данных, возникает ошибка
The data types ntext and nvarchar are incompatible in the equal to operator.
Небольшая помощь, пожалуйста..
Это код, который я использую для записи в БД:
<%@ Page Title="" Language="C#" MasterPageFile="~/admin/adminmaster.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="admin_Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:FormView ID="FormView1" runat="server" DataKeyNames="Id" DataSourceID="SqlDataSource1">
<EditItemTemplate>
text:
<asp:TextBox Text='<%# Bind("text") %>' runat="server" ID="textTextBox" /><br />
Id:
<asp:Label Text='<%# Eval("Id") %>' runat="server" ID="IdLabel1" /><br />
<asp:LinkButton runat="server" Text="Update" CommandName="Update" ID="UpdateButton" CausesValidation="True" /> <asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" ID="UpdateCancelButton" CausesValidation="False" />
</EditItemTemplate>
<InsertItemTemplate>
text:
<asp:TextBox Text='<%# Bind("text") %>' runat="server" ID="textTextBox" /><br />
Id:
<asp:TextBox Text='<%# Bind("Id") %>' runat="server" ID="IdTextBox" /><br />
<asp:LinkButton runat="server" Text="Insert" CommandName="Insert" ID="InsertButton" CausesValidation="True" /> <asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" ID="InsertCancelButton" CausesValidation="False" />
</InsertItemTemplate>
<ItemTemplate>
text:
<asp:Label Text='<%# Bind("text") %>' runat="server" ID="textLabel" /><br />
Id:
<asp:Label Text='<%# Eval("Id") %>' runat="server" ID="IdLabel" /><br />
<asp:LinkButton runat="server" Text="Edit" CommandName="Edit" ID="EditButton" CausesValidation="False" /> <asp:LinkButton runat="server" Text="Delete" CommandName="Delete" ID="DeleteButton" CausesValidation="False" /> <asp:LinkButton runat="server" Text="New" CommandName="New" ID="NewButton" CausesValidation="False" />
</ItemTemplate>
</asp:FormView>
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConflictDetection="CompareAllValues" ConnectionString='<%$ ConnectionStrings:ConnectionString_SQLServer %>' DeleteCommand="DELETE FROM [home] WHERE [Id] = @original_Id AND [text] = @original_text" InsertCommand="INSERT INTO [home] ([Id], [text]) VALUES (@Id, @text)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT [Id], [text] FROM [home]" UpdateCommand="UPDATE [home] SET [text] = @text WHERE [Id] = @original_Id AND [text] = @original_text">
<DeleteParameters>
<asp:Parameter Name="original_Id" Type="Int32"></asp:Parameter>
<asp:Parameter Name="original_text" Type="String"></asp:Parameter>
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Id" Type="Int32"></asp:Parameter>
<asp:Parameter Name="text" Type="String"></asp:Parameter>
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="text" Type="String"></asp:Parameter>
<asp:Parameter Name="original_Id" Type="Int32"></asp:Parameter>
<asp:Parameter Name="original_text" Type="String"></asp:Parameter>
</UpdateParameters>
</asp:SqlDataSource>
</asp:Content>
И вот где я хочу получить текстовую форму DB и записать ее в Label:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string DatabaseConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString_SQLServer"].ConnectionString;
string text = "SELECT text FROM home WHERE id=1";
using (SqlConnection conn = new SqlConnection(DatabaseConnectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand(text, conn);
box1_text.Text = (string)cmd.ExecuteScalar();
}
}
}
4 ответа
Можно попробовать с LIKE
Например
SELECT * FROM cor.Computer WHERE description LIKE 'HP NOTEBOOK'
В вашем запросе поместите преобразование вокруг любых текстовых полей, чтобы преобразовать их в nvarchar(max)
например: convert(nvarchar(max), nTextField)
Если это происходит с вами при помощи DBeaver, то, если вы нажмете "Отмена" после неудачного "Сохранить", строка будет сохранена независимо. Я думаю, это ошибка в программном обеспечении.
Чтобы избежать вышеупомянутого исключения, выполните следующий запрос в sql server-
Alter table home
Alter column text nvarchar(max)
GO
Я надеюсь, что мое решение полезно для вас.
drrr.Close();
//SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["rashmi"].ToString());
SqlCommand cmd1 = new SqlCommand("insert into registration(fullname,address,contact,village,city,district,state,email,password) values(@fullname,@address,@contact,@village,@city,@district,@state,@email,@password)");
con.Open();
cmd1.Connection = con;
cmd1.CommandType = CommandType.Text;
cmd1.Parameters.AddWithValue("@fullname", fullname.Text.Trim().ToString());
cmd1.Parameters.AddWithValue("@address", address.Text.Trim().ToString());
cmd1.Parameters.AddWithValue("@contact", contact.Text.Trim().ToString());
cmd1.Parameters.AddWithValue("@village", village.Text.Trim().ToString());
cmd1.Parameters.AddWithValue("@city", city.Text.Trim().ToString());
cmd1.Parameters.AddWithValue("@district", district.Text.Trim().ToString());
cmd1.Parameters.AddWithValue("@state", state.Text.Trim().ToString());
//cmd1.Parameters.AddWithValue("@crop", crop.Text.Trim().ToString());
cmd1.Parameters.AddWithValue("@email", email.Text.Trim().ToString());
cmd1.Parameters.AddWithValue("@password", password.Text.Trim().ToString());
int row;
try
{
row = cmd1.ExecuteNonQuery();
if (row > 0)
{
// lbltxt.Text = "<b>data sucess fully enter</b>";
ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Registration Successfully');window.location ='Registration.aspx';", true);
//Response.Write("data sucess fully enter");
// Response.Redirect("login.aspx");
}
else
{
lbltxt.Text = "<b>data sucess fully enter</b>";
lbltxt.ForeColor = System.Drawing.Color.DarkSlateBlue;
}
//else
//{
// Response.Write("data not insert");
//}
}
catch (Exception)
{
throw;
}
finally
{
if (con.State == ConnectionState.Open)
con.Close();
}