用guid作为表的字段,写存储过程是guid列式参数,可以编译通过。但是调用的时候应该输入什么数据?在c# 调用输入a4624a9f-501d-490c-ae8f-b7d763376ea0 或者去掉 - 都是说string guid转换失败。sqlserver内调用 也一样。。求教,,,, 

解决方案 »

  1.   

    当然了,GUID就是由那些东西组成的
      

  2.   

    //SqlParameter param1 = new SqlParameter("@custid", SqlDbType.UniqueIdentifier);
                //param1.Direction = ParameterDirection.Input;
                //param1.Value = "a4624a9f501d490cae8fb7d763376ea0";
                //comm.Parameters.Add(param1);
    加上这段 就报错 不加用默认的null则可以正常运行。
      

  3.   

    SELECT NEWID()
                                         
    ------------------------------------ 
    D4114D98-E20E-443A-9777-63225B635EB0(所影响的行数为 1 行)
    看组成方式
      

  4.   

    param1.Value = "a4624a9f-501d-490c-ae8f-b7d763376ea0";
      

  5.   

     param1.Value=System.Guid.NewGuid().ToString();
      

  6.   

    CREATE PROCEDURE dbo.Test
        @guid uniqueidentifier
    AS
        SELECT CONVERT(varchar(36),@guid) AS v
    GOusing System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Xml;
    using System.Data;
    using System.Data.SqlClient;namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                string constring = "Server=localhost;Initial Catalog = MyTest;Integrated Security = SSPI";
                SqlConnection con = new SqlConnection(constring);
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "Test";
                cmd.Parameters.Add("@guid", SqlDbType.UniqueIdentifier);            Guid guid = Guid.NewGuid();            cmd.Parameters["@guid"].Value  = guid;            SqlDataReader reader = cmd.ExecuteReader();            while (reader.Read())
                {
                    Console.WriteLine(reader.GetString(0));
                }
                reader.Close();            con.Close();            Console.Read();
            }
        }
    }
      

  7.   

    谢谢你的热心帮助,但我的这个guid是从别的表中取出来的。不是自动生成的。
    不知道这种情况怎么整?
    现在我将参数类型改为nvarchar(50) 可以正常使用。
         SqlParameter param1 = new SqlParameter("@custid", SqlDbType.NVarChar,50);
                param1.Direction = ParameterDirection.Input;
                param1.Value = "a4624a9f-501d-490c-ae8f-b7d763376ea0";
                comm.Parameters.Add(param1);
    谢谢楼上几位热心帮忙!
    但还是希望能知道我之前为什么不行
      

  8.   

    是你的短了,还是有特殊字符?可能是UNICODE的原因
      

  9.   

    但是我存储过程里还是guid类型参数。
    没动过,所以存储过程应该没写错。c#里也只是吧参数的类型变了,从guid换成nvarchar 这样就不报错了,而输入的值一直没变。我现在怀疑 从string 到 guid 是不是要有特定转换?
    可能在sqlserver里自动执行这种转换。但是c#里需要手动执行?
      

  10.   

    cmd.Parameters.Add("@guid", SqlDbType.UniqueIdentifier);
    你的参数类型是什么???
      

  11.   

    @custid uniqueidentifier =null,
      

  12.   

    param1.Value = "a4624a9f-501d-490c-ae8f-b7d763376ea0";
    你传入的是字符型呀,所以应该要用VARCHAR,要不然你改GUID类型,用一个GUID值来代替试下
      

  13.   

    string 转 guid类型
    string guidValue = "a4624a9f-501d-490c-ae8f-b7d763376ea0 ";
    GuidConverter convert = new GuidConverter();
    object obj = convert.ConvertFrom(guidValue);
    Guid g = (Guid)obj;
    Console.Write(g.ToString());
    Console.Read();