簡體   English   中英

字符串或二進制數據將被截斷。 但我無法以其他方式保存它

[英]String or binary data would be truncated. but i can't save it other way

我有這段代碼,我試圖用字符串更新consultas_marcadas列的值,這里是執行此操作的 function (這個 function 在名為“AB”的 ZA2F2ED4F8EBC2CBB14C21A29DZ40 中)

public bool SetValorPaciente(String nome, String coluna, String valor)
{
    bool flag = false;

    string strCmd = "UPDATE Paciente SET @coluna = @valor WHERE nome = @nome; ";

    using (SqlConnection objConn = new SqlConnection(conString))
    using (SqlCommand objCmd = new SqlCommand(strCmd, objConn))
    {
        objCmd.Parameters.AddWithValue("@coluna", coluna);
        objCmd.Parameters.AddWithValue("@valor", valor);
        objCmd.Parameters.AddWithValue("@nome", nome);

        objConn.Open();
        objCmd.ExecuteNonQuery();
        flag = true;
        objConn.Close();
    }

    return flag;
}

這里是獲取條件值 ( nome )、要更新的列 ( consultas_marcadas ) 和要更新的值 ( consultas ) 的地方,順便說一句,它們都是字符串。

dataclass datac = new dataclass();
bool valor = datac.SetValorPaciente(nome, "Consultas_Marcadas", consulta);

當我嘗試運行代碼時,我不斷收到此錯誤:

System.Data.dll 中發生“System.Data.SqlClient.SqlException”,但未在用戶代碼中處理。
字符串或二進制數據將被截斷。

在四處尋找答案之后似乎出現了,因為我的專欄(在這種情況下為consultas_marcadas )只接受比我提供的更小的字符串,現在這是一個我似乎無法解決的問題:

  • 我已將列數據類型從Varchar(Max)更改為NVarchar(Max)甚至更改為TEXT ,但這仍然不起作用;

  • 我試圖更改字符串consulta並使其只是第一個單詞,這並沒有給我任何錯誤,但它也從未更新過奇怪的表格。

因此,鑒於我要求兩件事:

  • 是否可以停止收到此錯誤?

  • 保存長字符串的最佳方法是什么? 也許 SQL 不是我應該尋找的東西,也許有一種方法可以將此文本保存到文件中,然后將該文件保存在某處並稍后閱讀,真正的程序員每天必須處理長字符串怎么辦?

根據您的描述,您希望在不引發異常的情況下解決錯誤。

首先,如果所有字段都是字符串類型,我們需要在數據庫中創建下表。

在此處輸入圖像描述

其次,您可以使用以下代碼來更新您的數據庫。

  public bool SetValorPaciente(String nome, String coluna, String valor)
        {
            bool flag = false;
            string strCmd = "UPDATE Paciente SET coluna = @coluna,valor=@valor WHERE nome = @nome; ";

            using (SqlConnection objConn = new SqlConnection(conString))
            using (SqlCommand objCmd = new SqlCommand(strCmd, objConn))
            {
                objCmd.Parameters.AddWithValue("@coluna", coluna);
                objCmd.Parameters.AddWithValue("@valor", valor);
                objCmd.Parameters.AddWithValue("@nome", nome);

                objConn.Open();
                objCmd.ExecuteNonQuery();
                flag = true;
                objConn.Close();
            }
            return flag;
        }

注意:我修改了關於strCmd語句的代碼。

當您找到與 nome 相同的值時,您可以更新colunavalor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM