Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Кто изучал C# по Троелсену?


Автор: DrunkProgrammer 16.1.2008, 12:03
Доброе время суток!
Читаю "Язык программирования C# 2005 и платформа .NET 2.0", но натолкнулся на лажу с SQL Server (глава 22). 
Когда пытаюсь выполнить скрипт из файла CarsDatabase.sql, выходит следующая дурь:
Msg 1802, Level 16, State 4, Line 2
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
Msg 5123, Level 16, State 1, Line 2
CREATE FILE encountered operating system error 5(Отказано в доступе.) while attempting to open or create the physical file 'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data'.
Msg 911, Level 16, State 1, Line 1
Could not locate entry in sysdatabases for database 'Cars'. No entry found with that name. Make sure that the name is entered correctly.
Msg 4902, Level 16, State 1, Line 2
Cannot find the object "dbo.Customers" because it does not exist or you do not have permissions.
Msg 1767, Level 16, State 0, Line 2
Foreign key 'FK_Orders_Customers' references invalid table 'dbo.Customers'.
Msg 1750, Level 16, State 0, Line 2
Could not create constraint. See previous errors.
Msg 911, Level 16, State 1, Line 1
Could not locate entry in sysdatabases for database 'Cars'. No entry found with that name. Make sure that the name is entered correctly.


Может кто сталкивался с такой хренью?

Автор: farad 16.1.2008, 12:28
Возможно недостаточно прав, а возможно версия сервера и скрипта не совпадают..

Автор: Любитель 16.1.2008, 12:57
Скрипт сам покажи smile

Автор: DrunkProgrammer 16.1.2008, 13:02
Код

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Orders_Customers]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Orders] DROP CONSTRAINT FK_Orders_Customers
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Orders_Inventory]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Orders] DROP CONSTRAINT FK_Orders_Inventory
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetPetName]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[GetPetName]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Orders]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Orders]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Customers]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Customers]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Inventory]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Inventory]
GO

CREATE DATABASE [Cars]  ON (NAME = N'Cars_Data', FILENAME =N'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data' , 
SIZE = 3, FILEGROWTH = 10%) 

LOG ON (NAME = N'Cars_Log', FILENAME= N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\Cars_Log.LDF' , 
SIZE = 1, FILEGROWTH = 10%)
GO
use[Cars]
CREATE TABLE [dbo].[Customers] (
    [FirstName] [char] (20) NULL ,
    [LastName] [char] (20) NULL ,
    [CustID] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Inventory] (
    [CarID] [int] NOT NULL ,
    [Make] [char] (20) NULL ,
    [Color] [char] (20) NULL ,
    [PetName] [char] (20) NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Orders] (
    [OrderID] [int] NOT NULL ,
    [CarID] [int] NULL ,
    [CustID] [int] NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Customers] WITH NOCHECK ADD 
    CONSTRAINT [PK_Customers] PRIMARY KEY  CLUSTERED 
    (
        [CustID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Inventory] WITH NOCHECK ADD 
    CONSTRAINT [PK_Inventory] PRIMARY KEY  CLUSTERED 
    (
        [CarID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Orders] WITH NOCHECK ADD 
    CONSTRAINT [PK_Orders] PRIMARY KEY  CLUSTERED 
    (
        [OrderID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Orders] ADD 
    CONSTRAINT [FK_Orders_Customers] FOREIGN KEY 
    (
        [CustID]
    ) REFERENCES [dbo].[Customers] (
        [CustID]
    ),
    CONSTRAINT [FK_Orders_Inventory] FOREIGN KEY 
    (
        [CarID]
    ) REFERENCES [dbo].[Inventory] (
        [CarID]
    )
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE GetPetName
@carID int,
@petName char(20) output

AS

SELECT @petName = PetName from Inventory where CarID = @carID


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
use[Cars]
INSERT INTO Inventory (carID, Make, Color, PetName)
VALUES (0, 'BMW', 'Red', 'Chucky')
GO

INSERT INTO Inventory (carID, Make, Color, PetName)
VALUES (1, 'BMW', 'Green', 'Snake')
GO

INSERT INTO Inventory (carID, Make, Color, PetName)
VALUES (2, 'Viper', 'Red', 'Zippy')
GO

INSERT INTO Inventory (carID, Make, Color, PetName)
VALUES (3, 'BMW', 'Pink', 'Buddha')
GO

INSERT INTO Inventory (carID, Make, Color, PetName)
VALUES (4, 'Colt', 'Rust', 'Rusty')
GO

INSERT INTO Customers (custID, FirstName, LastName)
VALUES (0, 'Mike', 'Larson')
GO

INSERT INTO Customers (custID, FirstName, LastName)
VALUES (1, 'Amy', 'Smith')
GO

INSERT INTO Customers (custID, FirstName, LastName)
VALUES (2, 'Kandi', 'Nash')
GO

INSERT INTO Orders (orderID, custID, carID)
VALUES (0, 0, 0)
GO

INSERT INTO Orders (orderID, custID, carID)
VALUES (1, 1, 4)
GO


Автор: Любитель 16.1.2008, 13:37
Цитата(DrunkProgrammer @  16.1.2008,  13:02 Найти цитируемый пост)
, FILENAME =N'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data'

Попробуй вообще бех этого - пусть дефолтные пути хватает.

Автор: DrunkProgrammer 16.1.2008, 14:13
Попробовал, начинает ругаться на следующую строчку, когда и ее заремировал, то заругался на следующую после Go строку:
Could not locate entry in sysdatabases for database 'Cars'. No entry found with that name. Make sure that the name is entered correctly.

Автор: IApple 18.1.2008, 10:24
1) вот этот кусок:

CREATE DATABASE [Cars]  ON (NAME = N'Cars_Data', FILENAME =N'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data' , 
SIZE = 3, FILEGROWTH = 10%) 

LOG ON (NAME = N'Cars_Log', FILENAME= N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\Cars_Log.LDF' , 
SIZE = 1, FILEGROWTH = 10%)
GO
use[Cars]

здается мне, сидит не на своем месте - ему б в самом начале быть.

2) именно с этих команд ошибки начинаются, проверь существует ли вообще путь C:\Program Files\Microsoft SQL Server\MSSQL\Data\
   а если существует, то возможно там уже есть файлы (Cars*.*) и поэтому невозможно их повторно создать (попробуй удалить).

Автор: DrunkProgrammer 21.1.2008, 12:32
Ребята, просьба ответить тем, кто работал с SQL Server, а то такое ощущение, что иногда ответчают просто ради участия. Тут, насколько я понял дело с правами на папку, там даже в сообщении есть:  "Отказано в доступе", по крайней мере это то, что я надыбал на англоязычных сайтах. Но не смотря на полные права на папку для всех пользователей, все равно ничего не помогает.

Автор: IApple 21.1.2008, 13:56
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
Msg 5123, Level 16, State 1, Line 2
CREATE FILE encountered operating system error 5(Отказано в доступе.) while attempting to open or create the physical file 'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data'.

Варианты действий:

1) Проверь, существуют ли в указаной папке сами файлы базы даных. Если существуют, то попробуй их удалить (указаный скрипт их должен поидее наново создать, так что не жалко).

2) если действительно не хватает прав на папку, так поменяй в скрипте этот длиннющий путь, на что-то покороче, типа D:\TMP... который ты сам создал и права все есть (заодно потом будеш знать че удалять опосля).

Автор: DrunkProgrammer 22.1.2008, 06:17
Нет файла базы, я собственно и хочу запустить скрипт, чтобы его создать. Папку менял - в корне диска D создавал и ставил полные права. Нихрена не помогает.

Автор: DrunkProgrammer 22.1.2008, 07:09
Короче, попарившись вдоволь, взял и средствами SQL Server создал пустую базу Cars, потом немного изменив строку LOG ON (NAME = N'Cars_Log', FILENAME= N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\Cars_Log.LDF' ,  SIZE = 1, FILEGROWTH = 10%) запустил скрипт и все ОК.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)